2012-01-16 2 views
0

I m новое для Struts2 и Hibernate. Я пытаюсь сохранить значения из формы. При отправке значения текстового поля будет сохранено значение null;Сохранить значение TextArea From Form

Моя форма как 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 имеет встроенный механизм для переноса значения формы к вашему уважаемой классу действий все, что вам нужно для выполнения следующих действий.

  1. Создайте свойство в вашем классе действий с тем же именем, что и имя поля формы, и укажите там получатели и сеттеры.

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 
    } 

} 

Итак, когда вы отправите форму, она будет содержать идентификатор и описание как значения формы. Перехватчик Struts2 (в этом случае парам) увидит, что ваш класс действия имеет эти свойства и будет заполнять их до того, как будет запущен метод 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 и seters этих переменных в своем классе.

В вашем случае, «ID»

private String Id; 
private String Description; 

public String getId() { 
    return Id; 
} 

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

... 
+1

почему имя действия должно быть имя класса ?? имя действия - это псевдоним, для которого нет определенных правил. –

+0

Да, вы правы. Позвольте мне исправить это – batbaatar

Смежные вопросы