从表单中保存TextArea的值

时间:2012-01-16 06:40:11

标签: hibernate struts2

我是Struts2和Hibernate的新手。我想从表单中保存值。 提交时,textarea的值将保存为null;

我的表格是这样的 -

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

2 个答案:

答案 0 :(得分:0)

Struts2具有内置机制,可以将表单值传输到您尊重的Action类,只需执行以下步骤即可。

  1. 在您的操作类中创建与表单字段名称相同的属性,并提供getter和setter。
  2. Struts2会将这些动作属性名称与从表单发送的字段名称相匹配,并为您填充它们

    在你的情况下你只需要做以下

    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和description作为表单值.Struts2拦截器(在本例中为param)将看到您的action类具有这些属性,并将在saveComment()方法获得之前填充它们执行。

    希望这会给你一些理解。

    简而言之,所有这些繁重的工作数据传输/类型转换都是由幕后的拦截器完成的。

    阅读拦截器细节以便更好地理解

    1. interceptors
    2. parameters-interceptor

答案 1 :(得分: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;
}

 ...