You can't have the "<" character inside a text node like that. When the compiler sees "<" it wants that to be the start of some piece of element markup. To use that character you have to escape it like so: <
Actually, the part of the JSP that is offending isn't the JSTL, it's the EL expression within the JSTL tag. EL is the Java Expression Language.
As Paul said, you can get around the problem by replacing the offending angle bracket with its XML entity equivalent. However, in Unified EL, I think you can also use "lt" and "gt" as operators. And even say things like this:
Then again, putting complex expressions in EL is a horrible thing to do. It's absolutely murder to debug. A much better approach is to create a javabean with all the computations already done by the controlling logic and using the useBean tag to expose that bean and its properties. Or, in your case, since you want logic on line items in a table, you might provide a decorator object that presents the rows in the table with their availability computations. Like so:
When it comes to destroying a civilization, gas chambers cannot hold a candle to echo chambers.