Prepopulating Formular mit Textfeldern-bean-Standard-Wert in Struts2
In Struts 1.x , ich habe bereits die Formen, Textfeldern Verwendung von Formular-bean mit Standard-Werten wie folgt,
<html:form action="/actions/signup1">
First name: <html:text property="firstName"/><BR>
In der Formular-bean, ich habe default-Wert wie folgt...
public class ContactFormBean {
private String firstName = "First name";
Aber in Struts 2.x , wenn ich versuchte, mit struts-tags textfield Sie wie folgt vor, Ihr nicht prepopulating der default-Wert aus der bean,
<s:form action="signup1">
<s:textfield name="formBean.firstName" label = "First Name" />
Habe ich die formBean erklärt in meiner Action-Klasse wird wie folgt mit entsprechenden getter-und setter-Methoden...
public class SignupAction1 extends ActionSupport {
private ContactFormBean formBean;
@Override
public String execute() throws Exception {
....
}
public ContactFormBean getFormBean(){
return formBean;
}
public void setFormBean(ContactFormBean fb){
formBean = fb;
}
}
Bitte lassen Sie mich wissen, wenn dies erreicht werden kann, auf Anfrage-Ebene und nicht auf session-Ebene.
Vielen Dank im Voraus.
<--Bearbeitet-->
struts.xml
<struts>
<constant name="struts.devMode" value="true" />
<package name="basicstruts2" extends="struts-default">
<action name="index">
<result>/index.jsp</result>
</action>
<action name="signup">
<result>/SignUp.jsp</result>
</action>
<action name="signup1" class="coreservlets.action.SignupAction1" method="execute">
<result name="success">/SignUp-Confirmation.jsp</result>
<result name="error">/SignUp.jsp</result>
</action>
</package>
</struts>
Anmeldung.jsp
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Sign UP</title>
</head>
<body>
<H1 ALIGN="CENTER">Sign Up</H1>
<s:form>
<s:textfield name="formBean.firstName" label = "First Name" />
<s:textfield name="formBean.lastName" label = "Last Name" />
<s:textfield name="formBean.email" label = "Email Address" />
<s:textfield name="formBean.faxNumber" label = "Fax Number" />
<s:submit action="signup1" method="loginAfterSubmit" value="Click here to Submit"/>
</s:form>
</body>
</html>
ContactFormBean.java
public class ContactFormBean {
private String firstName = "First name";
private String lastName = "Last name";
private String email = "user@host";
private String faxNumber = "xxx-yyy-zzzz";
public String getFirstName() {
return this.firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return(lastName);
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return(email);
}
public void setEmail(String email) {
this.email = email;
}
public String getFaxNumber() {
return(faxNumber);
}
public void setFaxNumber(String faxNumber) {
this.faxNumber = faxNumber;
}
public boolean isMissing(String value) {
if ((value == null) || (value.trim().equals(""))) {
return(true);
} else {
for(int i=0; i<defaultValues.length; i++) {
if (value.equals(defaultValues[i])) {
return(true);
}
}
return(false);
}
}
}
SignupAction1.java
public class SignupAction1 extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
private ContactFormBean formBean;
@Override
public String execute() throws Exception {
this.formBean = new ContactFormBean();
return SUCCESS;
}
public String loginAfterSubmit() {
String firstName = formBean.getFirstName();
String lastName = formBean.getLastName();
String email = formBean.getEmail();
String faxNumber = formBean.getFaxNumber();
if (formBean.isMissing(firstName)) {
return ERROR;
} else if (formBean.isMissing(lastName)) {
return ERROR;
} else if ((formBean.isMissing(email)) ||
(email.indexOf("@") == -1)) {
return ERROR;
} else if (formBean.isMissing(faxNumber)) {
return ERROR;
} else {
return SUCCESS;
}
}
public ContactFormBean getFormBean(){
return this.formBean;
}
public void setFormBean(ContactFormBean fb){
formBean = fb;
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ändern Sie Ihre
signup
Aktion Erklärung zusowie
signup1
zucreate-Methode
signup1
in IhremSignupAction1
Aktion Klasse, und bewegen Sie Ihre Logik ausexecute
zu. Inexecute
dann erstellen Sie eine neue Instanz von IhrContactFormBean
.name
ist genug für textfieldvalue
ist nicht erforderlich, es sei denn, Sie möchte etwas anders aus, die gerade den Wert von der getter 🙂legen Sie Ihre Standard-Wert an den Konstruktor:
Sind Sie wieder eine null -
formBean
Objekt mit dergetFormBean
Methode,dann wird der Konstruktor nie aufgerufen und der Versuch, Zugang formBean Attribut
firstName
gibt einen Fehler (das nicht gezeigt, weil es gewickelt ist, durch die Struts2-tag auf der JSP.Können Sie
1) instanziieren Sie es auf Ihrer execute-Methode:
2) instanziieren Sie faul auf Ihrem getter:
BEARBEITEN (durch deine Kommentare):
Ich weiß nicht, wie Sie haben, strukturiert Ihre web-Anwendung;
Aber wenn Sie auf eine JSP, die eine Aktion (und deren execute () - Methode oder eine andere Methode, wenn angegeben) wurde aufgerufen, BEVOR das rendering der JSP.
So, unabhängig davon, ob Sie ActionOne laden Zeug und ActionTwo genannt nach dem senden, oder ActionOne be-Sachen und eine andere Methode der ActionOne genannt nach dem senden, können Sie wissen, wenn Sie in einer "pre-JSP" Zustand oder im "post-senden" - Zustand...
Sagte, dass, wenn Sie setzen ein Objekt, und Sie möchten seinen Wert oder seine Attribute anders zu sein als
null
haben Sie instanziieren Sie in einer der zuvor beschriebenen Art und Weise.Natürlich, Ihr Objekt enthalten soll Getter und setter für die Attribute, und Sie müssen gebunden werden, um Ihre JSP-Objekte.
In Ihrem Beispiel könnten Sie haben:
ContactFormBean:
Ihre Aktion:
und in Ihre JSP:
Dazu können Sie mit zwei Maßnahmen, durch die Spaltung der execute () - und die loginAfterSubmit () - Methoden in zwei execute () - Methoden von zwei verschiedenen Aktionen;
Dann müssen Sie Ihre formBean in der SOWOHL die Maßnahmen, mit mindestens der getter in der ersten, und der setter in der zweiten.
Können Sie auch legen Sie die Name-Wert in Ihrem bean in der execute-Methode, wird es füllen Sie es in Ihrer JSP-Seite. Beispiel :
Einmal JSP aufgefüllt wird, finden Sie diesen Wert im Textfeld "Name".
Hoffe, das wird helfen.
Tapan