spring form标签不解析会话变量

时间:2015-08-10 13:10:36

标签: spring jsp jstl spring-form

我们正在将我们的应用程序从第3季迁移到第4季。我现在遇到一个问题,当我使用c:out而不是当我使用form:form时会话变量得到解决。我在另一个post上看到了一个类似的问题仍然没有得到答复。但是,我现在面临同样的问题。

<%@ include file="/common/taglibs.jsp"%>
<c:forEach var="item" items="${yesNos}">
<c:out value="${item}"/>
</c:forEach>


<form:select path="blocked">
<form:option value="" label=""/>
<form:options items="${yesNos}" itemValue="id" itemLabel="${domainValueProperty}"/>
</form:select>

c:forEach 能够在列表“ yesNos ”上进行迭代。 表单:选项似乎无法识别此列表“ yesNos ”并引发错误

  

OptionsTag - 类型[java.lang.String]对选项

无效

yesNos 是我们的POJO列表,并定义了相应的PropertyEditor。我怀疑PropertyEditor是一个问题,但下面的实现让我很难过。

我还意识到 form:form 标记还显示了一个问题,即传递给操作属性的动态会话变量无法解析并保持为$ {}甚至在生成的HTML源代码上。

JSP: formActionURL 的类型为String

<form:form action="${formActionURL}" commandName="pDSearch">

HTML来源

<form id="pDSearch" action="${formActionURL}" method="post">
  1. 我已经配置了taglibs uri,因为正在处理标记,所以它运行良好。
  2. 这适用于Spring 3.0.7&amp; servlet 2.3。现在,我们正在迁移到春季4.0.6&amp; servlet 2.3。
  3. 在另一个post上,请求者使用了servlet 2.5并仍然遇到了问题。迁移到servlet 2.5将对我们的应用程序产生巨大影响。
  4. 下面是在页面上导入的taglibs.jsp

    <%@ page language="java" errorPage="/error.jsp" pageEncoding="UTF-8" contentType="text/html; charset=utf-8" %>
    <%@ taglib uri="http://www.springframework.org/security/tags" prefix="security" %>
    <%@ taglib uri="http://www.springmodules.org/tags/commons-validator" prefix="v" %>
    <%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
    <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
    <%@ taglib uri="http://displaytag.sf.net/el" prefix="display" %>
    <%@ taglib uri="http://struts-menu.sf.net/tag-el" prefix="menu" %>
    <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
    <%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>
    <%@ taglib uri="http://www.opensymphony.com/oscache" prefix="cache" %>
    <%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator"%>
    <%@ taglib uri="http://www.opensymphony.com/sitemesh/page" prefix="page"%>
    

    非常感谢有人可以将我重定向到我能找到答案的来源。如果您需要更多信息,请告诉我。

1 个答案:

答案 0 :(得分:0)

在过渡Servlet 2.3期间EL的工作方式发生了变化 - &gt; Servlet 2.4。

在Servlet 2.3期间,EL作为JSTL 1.0的一部分提供。从Servlet 2.4开始,EL作为JSP 2.0的一部分提供,EL从JSTL 1.1中删除。

任何与Servlet 2.4+兼容的JSP标记库都希望在JSP中找到EL,而不再在JSTL中找到。换句话说,当您仍在Servlet 2.3容器上使用Servlet 2.4+兼容的JSP标记库时,其所有标记中的EL表达式将停止工作,因为它无法在JSP中找到EL。

因此,当您想要使用Servlet 2.4+兼容的JSP标记库(如Spring 4+,实际上需要Servlet 2.5)时,您确实需要升级到最小​​的Servlet版本。

另见:

相关问题