我有一个传统的Struts 1.2.8应用程序,我正在维护并从Oracle应用服务器(OAS)10g移植到JBoss 4.2.3。我有一个使用Struts HTML标记库的JSP。 JSP页面由EJB支持。用户输入项目编号,页面显示项目的详细信息(例如,产品目录中的项目)。
我使用此页面的前3次,正确返回项目详细信息。但出于某种原因,在第四次提交页面和随后提交的内容中,缺少一些项目信息。我正在使用
<html:hidden property="itemNumber"/>
<html:text property="itemNumber"/>
标记。这个问题的奇怪之处在于我无法在OAS中重现这个问题。另外,如果我用
替换上面的html:text标签<input type="text" value="<%=itemForm.getItemNumber() %>" >
代码正常运行。我的猜测是这是一个会话/请求/范围问题。但我没有找到正确的配置。
JBoss中的Struts是否需要特殊配置?
答案 0 :(得分:0)
检查struts-config.xml文件中用于操作的范围。很可能您可能希望范围是请求。
答案 1 :(得分:0)
问题在于Jasper JSP engine中的缓存。默认配置为
enablePooling - Determines whether tag handler pooling is enabled. true or false, default true.
我能够将enablePooling设置为false并解决了我的问题。我认为这是Jasper中的一个错误。当JSP自定义标记(例如html:hidden)后跟名称为“value”的jsp:属性时,会出现此错误。见下文。
<html:hidden property="itemNumber"/>
.
.
<html:text property="regularPrice" maxlength="9" readonly="<%=disabled%>"
tabindex="9" onkeyup="onRegularPriceChanged(this)">
<jsp:attribute name="value">
<webmodules:currency onlyDisplayValue="false">
<jsp:attribute name="currencyValue">
<bean:write name="updateItemForm" property="regularPrice"/>
</jsp:attribute>
</webmodules:currency>
</jsp:attribute>
</html:text>
html:hidden设置的“value”和jsp:attribute设置的“value”之间似乎存在命名空间和缓存冲突。在JSP页面使用两次之后,jsp:attribute设置的缓存值被用作html:hidden的值。