2013-11-30 3 views
2

У меня есть класс с именем MyFirstClass, в котором у меня есть String переменной и переменной User следующим образом:Как использовать псевдоним перехватчик для свойств объекта утилита класса в действии

public class MyFirstClass extends ActionSupport implements ModelDriven<User>,Preparable { 

    User user; 

    private String nickName; 

    public void prepare(){ 
     user = new User();  
    } 

    public User getModel(){ 
     return user; 
    } 
    ......................... 
    ........................  
} 

User класс имеет String переменные как userName и userAge. Как мой класс действия реализовал интерфейс ModelDriven, переменные класса User должны быть установлены по запросу.

У меня есть JSP-файл также, который разработан следующим образом:

<s:form action="index"> 
<s:actionerror/> 
<s:textfield name="myname" label="UserName:"> 
</s:textfield> 
<s:textfield name="myage" label="UserAge:"> 
</s:textfield> 
<s:submit key="submit" name="submit"/> 
</s:form> 

и struts.xml разработан, как,

<package name="default" namespace="/" extends="struts-default"> 
     <action name="index" class="com.actionClasses.MyFirstClass"> 
      <param name="aliases">#{'myname':'nickName','myname':user.userName,'myage':user.age}</param> 
      <interceptor-ref name="alias"/> 
      <interceptor-ref name="basicStack"/>   
      <result name="success">/success.jsp</result> 
      <result name="input">/user.jsp</result>     
     </action> 
</package> 

Моя проблема заключается в том, что С именем моих страница JSP текстовых полей не соответствуют именам свойств в классе User. Я не могу установить параметры запроса, как это, соответствующим свойствам в действии с помощью перехватчика alias.

ответ

1

Измените конфигурацию для псевдонимов, чтобы они соответствовали именам свойств, также используйте defaultStack, потому что он содержит modelDriven перехватчик. Вы заявили

User класс имеет строковые переменные, как userName и userAge.

Если форма подобна

user.jsp:

<s:form action="index"> 
<s:actionerror/> 
<s:textfield name="name" label="UserName:"> 
</s:textfield> 
<s:textfield name="age" label="UserAge:"> 
</s:textfield> 
<s:submit key="submit" name="submit"/> 
</s:form> 

и результат

success.jsp:

<s:actionerror/> 
<s:label name="userName" label="UserName:"/><br/> 
<s:label name="userAge" label="UserAge:"/><br/> 

конфигурация должна быть:

<package name="default" namespace="/" extends="struts-default"> 
    <action name="index" class="com.actionClasses.MyFirstClass"> 
     <param name="aliases">#{'name':'userName','age':'userAge'}</param> 
     <interceptor-ref name="defaultStack"/>   
     <interceptor-ref name="alias"/> 
     <result name="success">/success.jsp</result> 
     <result name="input">/user.jsp</result>     
    </action> 
</package> 

alias перехватчик находится в конце, так как она должна быть после modelDriven.

+0

userName и userAge не являются свойствами моего класса действий, они принадлежат классу ** User **. Вот почему, выше решение не работает. Как-то иначе ..... ?? – SagarS

+0

да, см. Обновленный. –

+0

Я думаю, что эта строка, ** # {'name': 'userName', 'age': 'userAge'} **, указывает, что если пользователь отправляет страницу, содержащую значения для «name» и «age», тогда эти значения должны попадать в сеттеры «userName» и «userAge» класса дескриптора (MyFirstClass), а не в какой-либо класс bean. В моем сценарии ** MyFirstClass ** является классом действий и ** Пользователь ** является классом bean внутри этого действия ..... Этот soln. все еще не работает. – SagarS

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

  • Нет связанных вопросов^_^