Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > jsf 2.0 передача параметров в метод бина


Автор: 4epT 12.4.2011, 14:18
Здравствуйте! Допустим имеется форма с вводов логина и пароля, на свойство value привязан бин:
Код

<h:inputText value="#{user.login}" />
<h:inputText value="#{user.password}" />


И есть кнопка
Код

<h:commandButton action="#{userController.login}" />


В методе login нужно как то получить введенные данные ... пробовал получать request из FacesContext, request получил, но методы getParametr("login")
 возвращает null.

Кто знает как такое делается ?) было бы классно если бы можно было получить параметры в виде объекта user =)

Автор: mbasil 12.4.2011, 14:46
А описан ли ваш компонент как управляемый, то есть
1. Либо в файле faces-config.xml с помощью элемента <managed-bean>
2. Либо с помощью аннотации @ManagedBean

В этом случае ваш компонент user должен быть помещен в некоторую област памяти (scope), откуды вы его можете извлечь
    

Автор: 4epT 12.4.2011, 15:13
Цитата(mbasil @ 12.4.2011,  14:46)
А описан ли ваш компонент как управляемый, то есть
1. Либо в файле faces-config.xml с помощью элемента <managed-bean>
2. Либо с помощью аннотации @ManagedBean

В этом случае ваш компонент user должен быть помещен в некоторую област памяти (scope), откуды вы его можете извлечь

Да оба класса user  и userController помечены аннотациями @Managedbean и @SessionScope.

А можно пример ?)

Автор: mbasil 12.4.2011, 15:42
Получение компонента зависит от области, в каоторую он помещен (по умолчанию область Request).
В моих классах действиях я делаю это примерно так:
Код

public class CustAction extends Action {

 public Object execute( HttpServletRequest request ) {

    String userName = null;

    // In Request scope
    userName = (User)request.getAttribute("user");

    // In Session scope
    HttpSession session = request.getSession();
    userName = (User)session.getAttribute("user");

    // In Application scope
    ServletContext servCtx = session.getServletContext();
    userName = (User)servCtx.getAttribute("user");
    . . .
}


На другой странице можно использовать тот же синтаксис, что и на порождающей странице.

Код
<h:outputText value="#{requestScope.user.login}" />


Есть и другие способы.

Автор: 4epT 12.4.2011, 15:59
Цитата(mbasil @ 12.4.2011,  15:42)
Получение компонента зависит от области, в каоторую он помещен (по умолчанию область Request).
В моих классах действиях я делаю это примерно так:
Код

public class CustAction extends Action {

 public Object execute( HttpServletRequest request ) {

    String userName = null;

    // In Request scope
    userName = (User)request.getAttribute("user");

    // In Session scope
    HttpSession session = request.getSession();
    userName = (User)session.getAttribute("user");

    // In Application scope
    ServletContext servCtx = session.getServletContext();
    userName = (User)servCtx.getAttribute("user");
    . . .
}


На другой странице можно использовать тот же синтаксис, что и на порождающей странице.

Код
<h:outputText value="#{requestScope.user.login}" />


Есть и другие способы.

Хм, но ведь метод управляемого бина не должен принимать параметров, а у Вас в примере он принимает httpRequest .. или я что то путаю ?

Автор: mbasil 12.4.2011, 16:40
Класс  CustAction это мой собственный класс действие, который вызывается контроллером. Всю эту бодягу, то есть реализацию MVC, я сам написал и игнорирую контроллер JSF. Мой класс действие не является "управляемым компонентом" с точки зрения JSF.  Этот пример я привел лишь для иллюстрации того, как можно получить компоненты из области с целью отправки в бизнес слой.

Как я уже писал можно получить и другим способом, например, я думаю так
Код

FacesContext context = FacesContext.getCurrentInstance();
ValueBinding binding =
         context.getApplication().createValueBinding("#{user.name}");
String name = (String) binding.getValue( context );

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)