您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

未指定默认名称空间时,函数“”必须与前缀一起使用

未指定默认名称空间时,函数“”必须与前缀一起使用

为什么要给表单和输入元素这样的无效名称

无论如何,您的 具体 问题是您不是在与普通字符串进行比较,而是与EL对象进行比较。如您现在所见,它期望一个${form}带有方法的bean ,该方法filterCriteria(String)返回某个具有getValues()方法的对象。那不是你想要的。您希望它是一个纯字符串。

对其进行修复,如下所示,您需要引用它:

<c:if test="${bean.code == 'form.filterCriteria(\'CONDITION_CODE\').values'}">

但这不能满足您的功能要求。您似乎在将Java / JSP与JavaScript混淆,并期望它们同步运行。事实并非如此,Java / JSP在Web服务器中运行并生成HTML。JavaScript是HTML的一部分,并且仅在Web浏览器中运行。该form变量仅在JavaScript中可用,而在JSTL标记中不可用。

实际上 需要通过来获取提交的值作为请求参数${param}。所有输入元素的值都可以通过其名称在请求参数映射中获得。它看起来像如下:

<c:if test="${bean.code == param['filterCriteria(\'CONDITION_CODE\').values']}">

我只是不保证这样做是否可行,我从未使用过带有无效字符的名称,您可能需要对奇数字符进行URL编码。如果给表单和输入元素一个有效的名称,该名称HTML规范中的规则相匹配,则容易得多。

<select name="condition">
  <option value="">&nbsp;</option>
  <c:forEach items="${conditions}" var="condition">
    <option value="${condition.code}" ${condition.code == param.condition ? 'selected' : ''}>${condition.code}:&nbsp;${condition.description}</option>
  </c:forEach>
</select>

(请注意,您在中的值无效<option value>,那些单引号不属于该值,我已将其删除

:根据注释,访问EL中的非法参数名称时,您似乎遇到EL语法错误问题。逃逸字符\似乎被EL解析器完全吞噬了。最好的选择可能是使用<c:set>

<c:set var="condition" value="filterCriteria('CONDITION_CODE').values" />
...
<c:if test="${bean.code == param[condition]}">

:选项值周围的那些单引号似乎是绝对必要的。在这种情况下,您需要在上面添加一个别名。完整的代码如下所示:

<select size="1" name="filterCriteria('CONDITION_CODE').values">
  <c:set var="condition" value="filterCriteria('CONDITION_CODE').values" /> 
  <option value="">&nbsp;</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}:&nbsp;${bean.description}</option>
  </c:forEach>
</select>
其他 2022/1/1 18:18:50 有464人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶