Struts 1.2.8 HTML taglib和JBoss的间歇性问题

时间:2009-06-09 21:29:48

标签: jboss struts

我有一个传统的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是否需要特殊配置?

2 个答案:

答案 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的值。