Struts 1.3:提交后请求属性丢失

时间:2012-11-02 20:38:18

标签: forms validation httprequest struts-1

我有两个jsp页面,比如form.jspmyForm.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>*&nbsp;<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>
&nbsp;&nbsp;<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中,范围仍然是请求。

然而,这不是一个好的解决方案,因为不同的浏览器标签共享同一个会话。

我该如何解决这个问题?

1 个答案:

答案 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; 
} 

如果您以这种方式进行设置,则当您的页面刷新时,用户输入的值仍应存在。