为什么你给你的表单和输入元素这样的无效名称?
无论如何,你的concrete问题是您不是与普通字符串进行比较,而是与 EL 对象进行比较。正如你现在所拥有的,它需要一个 bean${form}
用一种方法filterCriteria(String)
它返回一些对象,该对象具有getValues()
方法。那不是你想要的。你希望它是一个普通的字符串。
修复如下,需要引用:
<c:if test="${bean.code == 'form.filterCriteria(\'CONDITION_CODE\').values'}">
但这不会让您实现功能要求。看来您将 Java/JSP 与 JavaScript 混淆了,并期望它们同步运行。这不是真的,Java/JSP 在网络服务器中运行并生成 HTML。 JavaScript 是 HTML 的一部分,仅在网络浏览器中运行。这form
变量仅在 JavaScript 中可用,在 JSTL 标记中不可用。
You actually需要通过以下方式获取提交的值作为请求参数${param}
。所有输入元素的值都可以通过请求参数映射中的名称来获取。它看起来如下:
<c:if test="${bean.code == param['filterCriteria(\'CONDITION_CODE\').values']}">
我只是不保证这是否有效,我从未使用过包含无效字符的名称,您可能需要对奇数字符进行 URL 编码。如果您为表单和输入元素指定一个符合规则的有效名称,则会容易得多HTML规范 http://www.w3.org/TR/2000/REC-xml-20001006#NT-Name.
<select name="condition">
<option value=""> </option>
<c:forEach items="${conditions}" var="condition">
<option value="${condition.code}" ${condition.code == param.condition ? 'selected' : ''}>${condition.code}: ${condition.description}</option>
</c:forEach>
</select>
(请注意,您的值无效<option value>
,那些单引号不属于那里,我已经删除了它们)
Update:根据评论,在 EL 中访问非法参数名称时,您似乎遇到了 EL 语法错误问题。转义字符\
似乎完全被 EL 解析器吞没了。你最好的选择可能是将其别名为<c:set>
:
<c:set var="condition" value="filterCriteria('CONDITION_CODE').values" />
...
<c:if test="${bean.code == param[condition]}">
Update 2:选项值周围的单引号似乎是绝对必要的。在这种情况下,您需要添加另一个别名。完整的代码如下所示:
<select size="1" name="filterCriteria('CONDITION_CODE').values">
<c:set var="condition" value="filterCriteria('CONDITION_CODE').values" />
<option value=""> </option>
<c:forEach var="bean" items="${conditions}">
<c:set var="code" value="'${bean.code}'" />
<option value="${code}" <c:if test="${code == param[condition]}">selected="selected"</c:if>>${bean.code}: ${bean.description}</option>
</c:forEach>
</select>