我有两个 jsp 页面,比如说form.jsp
和myForm.jsp
.
在第一页 form.jsp 中,有一个单选按钮组(表单名称为“form”)。
当用户提交此表单时,会从数据库中检索一些信息,并使用这些信息构建 myForm.jsp 中的表单(表单名称为“myForm”)。
问题是,当提交第二个表单时,只显示错误,而不显示从 db 值创建的表单字段。例如,我从数据库中检索两个单选按钮 (property="prop") 的标签和值。
在struts-config.xml
中,我有:
<form-bean name="myForm" type="org.apache.struts.validator.MyValidatorActionForm">
<form-property name="prop" type="java.lang.Integer"></form-property>
</form-bean>
<action path="/form" input="/jsp/home.jsp" name="form" scope="request" type="myPackage.LoadInfo">
<forward name="Success" path="/jsp/myForm.jsp"/>
<forward name="Failure" path="/jsp/home.jsp" />
</action>
<action path="/myForm" input="/jsp/myForm.jsp" name="myForm" validate="true" scope="request" type="myPackage.MyValidatorAction">
<forward name="Success" path="/jsp/success.jsp"/>
<forward name="Failure" path="/jsp/failure.jsp"/>
</action>
在myForm.jsp
:
<html:form action="/myForm">
<div><label>* <bean:message key="myForm.label"/></label>
<c:forEach var="propTypes" items="${props}">
<html:radio property="prop" value="${propTypes.value}">${propTypes.label}
</html:radio>
</c:forEach>
<html:errors property="prop" />
</div>
<div><html:submit><bean:message key="myForm.label2"/></html:submit></div>
</html:form>
在validation.xml
:
在没有选择任何单选按钮的情况下提交表单后,会显示错误,但不会显示单选按钮。
我如何维护所有请求属性?我也尝试使用范围会话,但没有任何改变:
<action path="/myForm" input="/jsp/myForm.jsp" name="myForm" validate="true" scope="session" type="myPackage.MyValidatorAction">
<forward name="Success" path="/jsp/success.jsp"/>
<forward name="Failure" path="/jsp/failure.jsp"/>
</action>
我通过使用解决了:
request.getSession().setAttribute("props", props);
LoadInfo
在表单显示之前调用的Action 。
在myForm.jsp
我使用:
request.getSession().getAttribute("props");
而在 struts-config.xml 中,范围仍然是请求。
然而,这不是一个好的解决方案,因为不同的浏览器选项卡共享同一个会话。
我该如何解决这个问题?