Свойство Action типа интерфейса - PullRequest
0 голосов
/ 25 марта 2010

Насколько я понимаю, природа действия заключается в том, что свойства могут быть переданы через значения параметров запроса. И еще одна замечательная особенность заключается в том, что Struts2 позволяет напрямую заполнять значения параметров в свойстве Class type;)

Предполагая, что существует класс Action и свойства, как показано ниже, действие класса расширяет ActionSupport { Пользовательский пользователь;

   @Action(value="hello" {@result=(.......)})
   public void execute() {
      ........
   }
    .....
   public void setUser(User user) {
     this.user = user;
   }
   public User getUser() {
     return this.user;
   }
}

class User {
   String name;
    .....
   public void setName(String name) {
     this.name = name;
   }
   public String getName() {
     return this.name;
   }
}

вы можете заполнить свойство класса User следующим образом.

http://...../hello.action?user.name=John or via jsp page

Тогда я понимаю, что на самом деле люди делают свойство Action типом Interface. Мой вопрос в том, что является причиной этого. Если есть пример кода, демонстрирующий это будет здорово.

Заранее спасибо!

1 Ответ

1 голос
/ 29 марта 2010

Извините, но ваш вопрос не имеет особого смысла. Для уточнения:

  • «Свойства»: в Java «свойство» класса - это то, что доступно через метод getter / setters (setXXX () / getXXX () => свойство XXX), типично (но не обязательно) соответствует в приватное поле.

  • В Struts2 у вас есть объект Action, и обычно (не обязательно, не всегда) свойства заполняются (устанавливаются) из запроса (через перехватчик «Parameters»), а затем на этапе просмотра считываются из JSP (или что-то еще) страница. Итак, в вашем примере для запроса http: //...../hello.action? User.name = John , Struts2 попытается найти в вашем действии ( ... фактически в вашем стеке значений) свойство «пользователь», которое имеет свойство «имя», и попытайтесь установить его (если типы являются конвертируемыми). То есть он попытался бы вызвать что-то вроде yourAction.getUser (). SetName ("John") . Struts2 не знает - не волнует - какого типа это свойства «Пользователь» или «Имя», даже если они являются реальными полями или нет. (Ожидается, что они будут вести себя как «bean», то есть: они должны иметь конструктор по умолчанию).

  • Почему и когда вам следует кодировать интерфейсы вместо конкретных классов, это то, что объясняется в любой книге по Java, это просто стандартная хорошая практика, и об этом написано множество страниц. Это не имеет ничего общего со Struts2. В этом контексте для действия обычно интересны только некоторые служебные поля, объекты, которые обычно являются долгоживущими (возможно, одиночными), не создаются самим действием (ни запросом!). Таким образом, эти интерфейсы НЕ являются свойствами, которые мы рассматриваем здесь, они (обычно) не публикуются публично и обычно не заполняются и не считываются с клиента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...