2012-01-16 4 views
0

Struts2とHibernateを初めて使用しました。私はフォームから値を保存しようとしています。 送信時に、テキストエリアの値がnullに保存されます。TextAreaの値をフォームから保存する

私のフォームはthis-

<s:form action="saveComment"> 
         <s:push value="ai"> 
          <s:hidden name="id"/> 
          <table cellpadding="5px"> 
           <tr><td><s:textarea name="description" rows="5" cols="60" theme="simple" /> 
            </td> 
            <td> <s:submit type="image" src="images/sbt.gif" > 

             </s:submit> 
            </td></tr> 

          </table> 
         </s:push> 
        </s:form> 

のようなもので、this-

public String saveComment() throws Exception { 

    Map session = ActionContext.getContext().getSession(); 
    ExternalUser user = (ExternalUser) session.get("user"); 
    AIComment aiComment = new AIComment(); 
    aiComment.setAi(ai); 
    aiComment.setPostedOn(new java.util.Date()); 
    aiComment.setPostedBy(user); 
    aiCommentDao.saveAIComment(aiComment); 
    return SUCCESS; 
} 

答えて

0

Struts2のは、あなたの尊敬Actionクラスにフォームの値を転送するためのメカニズムに必要なすべてを構築しているように私のアクションメソッドがあります以下の手順を実行します。

  1. フォームフィールド名と同じ名前のあなたのアクションクラスのプロパティを作成し、ゲッタとセッタを提供します。

Struts2のは、あなたがtは、以下の

public class YourAction extends ActionSupport{ 

    private String id; 
    private String description 

    getter and setters for id and description fileds 

    public String saveComment() throws Exception { 
     //Your Method logic goes here 
    } 

} 
を行う必要があるすべてのフォームから送信されているフィールドの名前と、それらのアクションのプロパティ名と一致しますし、あなたの場合には、あなた

のためにそれらを移入します

フォームを送信するときにフォームの値としてIDと説明が含まれます.Struts2インターセプタ(この場合はparam)には、これらのプロパティがあり、saveComment()メソッドが実行される前にこれらのプロパティが設定されています。

これはあなたにいくつかの理解を与えることを望みます。

要するに、これらの重労働データ転送/タイプ変換は、シーンの背後にあるインターセプタによって行われています。

がより良く理解

  1. interceptors
  2. parameters-interceptor
0

まずためのインターセプタの詳細を読んで、あなたのアクションの名前は、エイリアスの名前でなければなりません。次に、メソッド名を指定する必要があります。

あなたは私にはわからないので、あなたは

<s:form action="Comment_saveComment"> 

そして、あなたのクラスで

public class Comment extends ActionSupport { 

    public String saveComment() throws Exception { 
    Map session = ActionContext.getContext().getSession(); 
    ExternalUser user = (ExternalUser) session.get("user"); 
    AIComment aiComment = new AIComment(); 
    aiComment.setAi(ai); 
    aiComment.setPostedOn(new java.util.Date()); 
    aiComment.setPostedBy(user); 
    aiCommentDao.saveAIComment(aiComment); 
    return SUCCESS; 
    } 
} 

を書くことができstruts.xmlに

<action name="Comment_*" method="{1}" class="com.yourproject.folder.Comment"> 
     <result name="input">/pages/page.jsp</result> 
     <result name="success" type="redirectAction">nextAction</result> 
    </action> 

をアクションとメソッドを定義する必要があります。もちろん、

あなたはどのように "ai"と "user"の値を持っていますか? FORMから値を取得する場合は、同じ形式の入力名で文字列を宣言する必要があります。あなたのケースでは "id"、 "description"は入力値です。 FORMから値を取得する場合は、クラス内でこれらの変数のゲッターとセッターを宣言する必要があります。

あなたの場合は

、「ID」の

private String Id; 
private String Description; 

public String getId() { 
    return Id; 
} 

public void setId(String Id) { 
    this.Id = Id; 
} 

... 
+1

アクションの名前は、クラスの名前でなければなりませんなぜ?アクション名はエイリアスです。このルールは定義されていません。 –

+0

はい、そうです。私はそれを修正させて – batbaatar