Struts 1.3: Anfrage-Attribute verloren nach dem Einreichen
Habe ich zwei jsp-Seite, sagen form.jsp
und myForm.jsp
.
In der ersten Seite, zu bilden.jsp, es ist ein radio button-group (das Formular den Namen "Formular").
Wenn der Nutzer diese form, einige Informationen abgerufen werden aus einer db und mit diesen Informationen das Formular in myForm.jsp gebaut wird (der name des Formulars ist "myForm").
Das problem ist, dass, wenn dieses zweite Formular gesendet wird, werden nur die Fehler angezeigt, aber nicht die Formularfelder erstellt von db-Werten.
Ich habe zum Beispiel das abrufen von Datenbank-Bezeichnungen und Werte für die beiden radio-buttons (Eigenschaft " ="prop").
In struts-config.xml
habe ich:
<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>
In 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>
In validation.xml
:
Nachdem Sie die form Einreichen, ohne wählen Sie jeden radio-button, die Fehlermeldung angezeigt, aber nicht die radio-buttons.
Wie konnte ich behaupten alle request-Attribute?
Ich habe versucht, Rahmen der Sitzung auch, aber hat sich nichts geändert:
<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>
Ich gelöst mit:
request.getSession().setAttribute("props", props);
in der Aktion LoadInfo
aufgerufen, bevor die Anzeige des Formulars.
In myForm.jsp
ich benutze:
request.getSession().getAttribute("props");
Statt in der struts-config.xml der Umfang bleibt Anfrage.
Trotzdem, das ist keine gute Lösung, denn die verschiedenen browser-tabs teilen sich die gleiche session.
Wie könnte ich dieses Problem beheben?
InformationsquelleAutor Sefran2 | 2012-11-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihrem Formular Felder in Ihrer jsp-Seite sollte die entsprechenden Eigenschaften in der ActionForm Klasse.
Also, wenn Ihr jsp hat folgenden radio-button
Müssen Sie eine entsprechende Eigenschaft, in der Sie Ihre Aktion wie folgt ein und stellen Sie sicher, dass Sie die Getter und setter:
Wenn du es auf diese Art und Weise, die vom Benutzer eingegebenen Werte sollten immer noch da sein, wenn Sie Ihre Seite aktualisiert.
Ich bin nicht sicher, ob das eine gute Idee ist oder ob es funktionieren wird oder nicht, aber haben Sie versucht, die änderung der Bereich von der Anfrage bis zur Sitzung?
Ich dachte, so auch, und ich habe bereits versucht, es zu ändern, um die session, aber es funktioniert nicht.
Probieren Sie es aus: In Ihrem action-Klasse ein SysOut auf die radio-button-Eigenschaft, wenn der Fehler passiert, und sehen, was wird ausgedruckt. Auf diese Weise wissen Sie, wenn das Objekt existiert nicht mehr wenn der Fehler Auftritt.
wenn ich nicht wählen Sie die Schaltfläche und dann habe ich das Formular Absenden, wird die Validierung über xml erfolgt (die error msg ausgedruckt), aber der execute-Methode der Action-Klasse MyValidatorAction ist nicht genannt (ich habe keine Ausnahme, nichts). Stattdessen, wenn ich wählen Sie eine Optionsschaltfläche aus, und senden Sie dann das Formular der execute-Methode aufgerufen wird, wird der Wert des radio-Eigenschaft ist gut Druck auf dem System.heraus, aber der Druck von der "Requisiten" - Objekt gibt eine null-pointer-exception (System.aus.println(request.getAttribute("Requisiten").toString());)
InformationsquelleAutor Susie