1

と言う2つのjspページがform.jspありmyForm.jspます。

最初のページ form.jsp には、ラジオ ボタン グループがあります (フォーム名は "form")。

ユーザーがこのフォームを送信すると、データベースからいくつかの情報が取得され、これらの情報を使用して myForm.jsp のフォームが作成されます (フォーム名は「myForm」です)。

問題は、この 2 番目のフォームが送信されると、エラーのみが表示され、db 値から作成されたフォーム フィールドが表示されないことです。たとえば、データベースから 2 つのラジオ ボタン (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フォームの表示前に呼び出されるアクションで。

myForm.jspが使用する:

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

代わりに、struts-config.xml では、スコープは request のままです。

それにもかかわらず、これは良い解決策ではありません。なぜなら、異なるブラウザー タブが同じセッションを共有するからです。

この問題を解決するにはどうすればよいですか?

4

1 に答える 1

1

jspページのフォームフィールドには、ActionFormクラスの対応するプロパティが必要です。

したがって、jspに次のラジオボタンがある場合

<html:radio name="myForm" property="name">

次のようにアクションフォームに対応するプロパティが必要であり、ゲッターとセッターがあることを確認してください。

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 に答える