2012-01-16 41 views
0

我是Struts2和Hibernate的新成員。我試圖從表單中保存值。 關於提交textarea的值將被保存爲null;從表格中保存TextArea的值

我的形式是像這個 -

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

和我的行動方法就像是這個 -

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. 在您的動作類中創建與表單字段名稱相同的屬性並提供getter和setter。

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

首先,你行動的名稱必須是你的別名的名稱。然後你應該指定方法名稱。

當然,你應該在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> 

所以定義動作和方法,你可以寫

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

我不知道你如何得到「ai」和「user」的價值。如果您想從FORM中獲取值,則必須聲明與表單輸入名稱相同的字符串。在你的情況「id」,「description」是輸入值。如果你想從FORM獲得值,你應該在你的類中聲明這些變量的getter和setter。

在你的情況下,「ID」

private String Id; 
private String Description; 

public String getId() { 
    return Id; 
} 

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

... 
+1

爲什麼動作的名稱應該是類的名字?動作名稱是一個別名,沒有爲此定義規則 – 2012-01-16 06:59:03

+0

是的,你是對的。讓我解決它 – batbaatar 2012-01-16 07:02:24