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

我们正在对表单变量进行一些奇怪的处理。 无论如何,我已经设法从请求中获取变量,所以我可以做一些数据库的东西。 现在我想回发到,所以选择框可以用原始选项填充。

以下是选择字段的示例:

JSP:

Condition Code:      <option value="'${bean.code}'" selected="selected">${bean.code}: ${bean.description}     

正如您所看到的,名称是以下forms的函数: name="filterCriteria('CONDITION_CODE').values

这是表格:

 private String[] fieldNames; private Map filters = new HashMap(); public String[] getFieldNames() { return this.fieldNames; } public Map getFilters() { return this.filters; } public FilterCriteriaForm getFilterCriteria(String fieldName) throws ServletException { FilterCriteriaForm filter = (FilterCriteriaForm)filters.get(fieldName); if (filter == null) { filter = new DetFilterCriteriaForm( requestAction ); filters.put( fieldName, filter ); } return filter; } public void setFilters(Map val) { this.filters = val; } } 

无论如何,我通常在jsp上做类似的事情,将字段设置回forms: " selected="selected"

当我这样做…我得到这个错误:

当未指定默认命名空间时,函数filterCriteria必须与前缀一起使用

编辑:

  Condition Code:      <option value="'${bean.code}'" selected="selected">${bean.code}: ${bean.description}     

这是什么工作….我再次仔细查看表单…取出单引号并使用getFilters():

      <option value="${code}" selected="selected">${bean.code}: ${bean.description}   

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

无论如何,你的具体问题是你没有比较普通的字符串,而是比较EL对象。 就像你现在一样,它需要一个带有filterCriteria(String)方法的bean ${form} ,它返回一个具有getValues()方法的对象。 那不是你想要的。 你希望它是一个普通的字符串。

修复如下,你需要引用它:

  

但这不会让你实现function要求。 看起来你将Java / JSP与JavaScript混淆并期望它们同步运行。 事实并非如此,Java / JSP在Web服务器中运行并生成HTML。 JavaScript是HTML的一部分,仅在webbrowser中运行。 form变量仅在JavaScript中可用,而不在JSTL标记中。

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

  

我只是不保证如果这样可行,我从未使用过无效字符的名字,你可能需要对奇数字符进行URL编码。 如果您根据HTML规范为表单和输入元素提供符合规则的有效名称,则会容易得多。

  

(请注意, 值无效,那些单引号不属于那里,我已将其删除)


更新 :根据注释,您在访问EL中的非法参数名称时似乎有EL语法错误问题。 转义字符\似乎被EL解析器完全吞噬。 你最好的选择可能是用代替它:

  ...  

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