と言う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>* <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
フォームの表示前に呼び出されるアクションで。
私myForm.jsp
が使用する:
request.getSession().getAttribute("props");
代わりに、struts-config.xml では、スコープは request のままです。
それにもかかわらず、これは良い解決策ではありません。なぜなら、異なるブラウザー タブが同じセッションを共有するからです。
この問題を解決するにはどうすればよいですか?