0

Struts 1.x では、次のように、フォーム Bean のデフォルト値を使用してフォーム テキスト フィールドに事前入力しました。

<html:form action="/actions/signup1">
First name: <html:text property="firstName"/><BR>

そして、フォーム Bean には、次のようなデフォルト値があります...

public class ContactFormBean {
private String firstName = "First name";

しかし、Struts 2.x では、struts-tags テキストフィールドを次のように試してみたところ、Bean からデフォルト値が事前設定されていませんでした。

<s:form action="signup1">
    <s:textfield name="formBean.firstName" label = "First Name" />

次のように、適切な getter メソッドと setter メソッドを使用して、Action クラスで宣言された formBean を持っています...

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

これがセッション レベルではなくリクエスト レベルで達成できるかどうか教えてください。前もって感謝します。

<--編集済み-->

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>

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

}
4

4 に答える 4

1

signupアクション宣言を次のように変更します

<action name="signup" class="coreservlets.action.SignupAction1">
   <result>/SignUp.jsp</result>
</action>

そしてsignup1_

<action name="signup1" class="coreservlets.action.SignupAction1" method="signup1">

アクションクラスにメソッドsignup1を作成しSignupAction1、そこからロジックを移動しますexecute。次に、executeの新しいインスタンスを作成しますContactFormBean

于 2012-11-16T14:19:48.807 に答える
0

Bean in execute メソッドで Name 値を設定することもできます。これにより、JSP ページに入力されます。例は次のとおりです。

public String execute() throws Exception {
    this.formBean = new ContactFormBean();
    //Set your Name value here        
    formBean.setName("John Doe");
    return SUCCESS;
}

JSP が読み込まれると、この値が [名前] テキスト ボックスに表示されます。これが役立つことを願っています。

タパン

于 2012-11-16T15:04:44.803 に答える
0

デフォルト値をコンストラクターに入れます。

public class ContactFormBean {
    private String firstname;
    public ContactFormBean (){
        this.firstName = "First name";
    }
}
于 2012-11-16T09:54:04.097 に答える
0

メソッドでnullformBeanオブジェクトを返しているgetFormBean場合、コンストラクターは呼び出されず、formBean属性にアクセスしようとするとfirstNameエラーが発生します(JSPのStruts2タグによってラップされているため、表示されません.

あなたはできる

1) execute メソッドでインスタンス化します。

public String execute() throws Exception {
   this.formBean = new ContactFormBean();
}

2)ゲッターで遅延してインスタンス化します:

public ContactFormBean getFormBean(){
    if (formBean==null) 
       this.formBean = new ContactFormBean();
    return this.formBean;
}

編集(コメントのため):

Web アプリケーションをどのように構成したかわかりません。

ただし、JSP を使用している場合は、Action (およびその execute() メソッド、または指定されている場合は別のメソッド) が、JSP をレンダリングする前に呼び出されました。

したがって、ActionOne が何かをロードして送信後に ActionTwo が呼び出されるか、または ActionOne が何かをロードして送信後に ActionOne の別のメソッドが呼び出されるかにかかわらず、自分が「pre-JSP」状態にあるか「post-submit」状態にあるかを知ることができます。州...

つまり、オブジェクトを公開していて、その値または属性を とは異なるものにしたいnull場合は、上記のいずれかの方法でインスタンス化する必要があります。

明らかに、オブジェクトにはその属性のゲッターとセッターが含まれている必要があり、それらは JSP オブジェクトにバインドされている必要があります。

あなたの例では、次のことができます。

ContactFormBean:

public class ContactFormBean {
   private String firstName = "First name";
   public String getFirstName(){
      return this.firstName;
   }
   public String setFirstName(String firstName){
      this.firstName = firstName;
   }
}

あなたの行動:

public class SignupAction1 extends ActionSupport {
    private ContactFormBean formBean;

    public ContactFormBean getFormBean(){
        return formBean;
    }
    public void setFormBean(ContactFormBean fb){
        formBean = fb;
    }


    @Override
    public String execute() throws Exception {
       /* this method is executed before showing the JSP */

       /* first time initialization */
       this.formBean = new ContactFormBean();
       return SUCCESS;
    }

    public String loginAfterSubmit() throws Exception {
       /* this method is executed after the submit button was pressed */

       /* i don't initialize nothing here, 
          ContactFormBean is coming from the page */ 

       System.out.println("ContactFormBean's firstName value is: " +
                          this.formBean.getFirstName());
       return "goSomewhereElse";
    }

}

そしてあなたのJSPで:

<s:form>
   <s:textfield name="formBean.firstName" label = "First Name" />
   <s:submit action="signup1" method="loginAfterSubmit" value="Press here to submit" />
</s:form>

execute() メソッドと loginAfterSubmit() メソッドを 2 つの異なるアクションの 2 つの execute() メソッドに分割することにより、2 つのアクションでこれを行うことができます。

次に、少なくとも最初の getter と 2 番目の setter を使用して、両方のアクションに formBean を含める必要があります。

于 2012-11-16T10:19:22.727 に答える