我有两个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);
在显示表单之前调用的Action LoadInfo
中。
在myForm.jsp
我使用:
request.getSession().getAttribute("props");
而是在struts-config.xml中,范围仍然是请求。
然而,这不是一个好的解决方案,因为不同的浏览器标签共享同一个会话。
我该如何解决这个问题?
答案 0 :(得分:1)
您的jsp页面中的表单字段应该在ActionForm类中具有相应的属性。
所以如果你的jsp有一个下面的单选按钮
<html:radio name="myForm" property="name">
您需要在操作表单中使用相应的属性,如下所示,并确保您拥有getter和setter:
public class MyClass{
private String name;
public String getName()
{
return name;
}
public void setName(String name){
this.name = name;
}
如果您以这种方式进行设置,则当您的页面刷新时,用户输入的值仍应存在。