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);

LoadInfo在表单显示之前调用的Action 。

myForm.jsp我使用:

 request.getSession().getAttribute("props");

而在 struts-config.xml 中,范围仍然是请求。

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

我该如何解决这个问题?

4

1 回答 1

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

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

于 2012-11-02T21:05:04.923 回答