2016-06-27 4 views
1

別々のクラスにフォームからデータを取得します。Struts2のは、これは奇妙な質問のビットになるだろうと私はそれを説明するために最善を尽くしますが、私と一緒に負担します

私は、情報を入力するフォームを持つ.jspページと、Strutsアクションを処理するSubmitAction.javaページと、すべてのデータのためのコンテナであるRequest.javaページを持っています。実際にはもっと多くのデータが含まれています)。

私の主な問題は、私はRequestオブジェクトがNewForm.jspに入力されたデータのいずれかを知ってもらうことができないということです。例えばデバッグ時、constructInsertStatement()関数の内部で、MyTextBoxをの値は常にnullです。

私は私が持っていると、うまくいけば、誰かが私には欠けているものを私に伝えることができるものを投稿します。

NewForm.jsp

<html> 
<head> 
<sx:head /> 

</head> 
<body> 

    <s:form action="submitNew" method="post" namespace="/"> 
     <s:textfield label="Text Box" name="myTextBox" 
     <s:submit label="Submit" name="submit_btn" align="center" /> 
    </s:form> 
</body> 
</html> 

提出Action.java

public class SubmitAction extends ActionSupport { 

    private Request request = new Request(); 

    public void executeInsert() throws SQLException{ 
     Connection conn = null; 
     PreparedStatement ps = null;  

     try {  
      ps = request.constructInsertStatement(); 

      // execute the INSERT Statement 
      ps.executeUpdate(); 
     } catch (SQLException e) { 

      System.out.println(e.getMessage()); 

     } catch (Exception e) { 

      System.out.println(e.getMessage()); 

     }finally { 

      if (ps != null) { 
       ps.close(); 
      } 

      if (conn != null) { 
       conn.close(); 
      } 
     } 
    } 
} 

Request.java

public class Request { 
    private String myTextBox; 

    public PreparedStatement constructInsertStatement() throws SQLException{ 
     PreparedStatement ps = null; 
     Connection conn = null; 

     String URL = "myURL"; 

     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
     } 
     conn = DriverManager.getConnection(URL, "defaultUser", "defaultPassword"); 

     String sql = "INSERT INTO `myTable` (SomeText)"; 
     sql += "VALUES"; 
     sql+="(?)"; 

     ps = conn.prepareStatement(sql); 

     try{ 
      ps.setString(1, myTextBox); 

     } catch (SQLException e) { 

      System.out.println(e.getMessage()); 

     } catch (Exception e) { 

      System.out.println(e.getMessage()); 

     } 

     return ps; 
    } 

    public String getmyTextBox() { 
     return myTextBox; 
    } 

    public void setmyTextBox(String myTextBox) { 
     this.myTextBox = myTextBox; 
    } 

<struts> 
    <package name="default" extends="struts-default" namespace="/">   
     <action name="submitNew" 
      class="my.package.path.SubmitAction" method="executeInsert"> 
      <result name="success">NewForm.jsp</result> 
     </action> 
    </package> 
</struts> 

答えて

1

Struts.xmlアクションはあなたが有効なゲッターとセッター

public String getMyTextBox() { 
    return myTextBox; 
} 

public void setMyTextBox(String myTextBox) { 
    this.myTextBox = myTextBox; 
} 

を必要とし、このオブジェクトに値を設定するにはゲッター

public Request getMyRequest() { return request; } 

を持っている必要がありRequestオブジェクトを取得するには

あなたはOGNLは、適切なアクセス方法についての詳細を知りたい場合は豆のネクタイはStruts2 passing variables case答えを参照してください。あなたはname属性でプロパティへのパスを使用する必要があるテキストフィールドにこのオブジェクトをバインドする

<s:textfield label="Text Box" name="myRequest.myTextBox" /> 
+0

私はすでに 'Request.java'にゲッターとセッターを定義しています。他の場所で定義する必要がありますか?また、 'Request'クラスの中に空の' Request'オブジェクトを作成してゲッターを取得する必要はありませんか? – Zared619

+0

いいえ、オブジェクトはデフォルトで作成されます。 –

+0

私が元々持っていたゲッターとセッターは正しい場所にありますか? – Zared619

関連する問題

 関連する問題