Как передать get-параметр в бэк-бин в jsf? - PullRequest
1 голос
/ 29 марта 2010

У меня есть get-параметр с именем controller. Когда я пытаюсь передать его (с propertyChangeListener) своему компоненту поддержки, я получаю null вместо реального значения этого параметра:

<h:commandButton value="#{msg['mail.send']}" styleClass="mailbutton" action="#{mailSender.sendMail}">
   <f:setPropertyActionListener target="#{mailSender.controllerName}" value="{#param.controller}"/>
</h:commandButton>

Итак, у меня два вопроса:

  1. Как правильно установить свойство bean-компонента со значением get-параметра? На самом деле, я уже получил значение от ExternalContext#getRequestParam, но, возможно, есть и другие решения.
  2. Более интересный вопрос: почему здесь не работает propertyActionListener? Что это делает на самом деле? (опять же у меня есть некоторые мысли по этому поводу, но было бы неплохо прочитать более подробные объяснения).

1 Ответ

3 голосов
/ 29 марта 2010

Во-первых, h:commandButton запускает запрос POST, а не GET. Чтобы выполнить запрос GET, вам нужно h:outputLink. Чтобы установить параметр GET, вам нужно f:param. Чтобы установить его как свойство компонента, определите его как <managed-property> в faces-config.xml со значением #{param.name}. Дополнительные подсказки и примеры кода можно найти здесь .

Во-вторых, ваш код неверен. Значение f:setPropertyActionListener должно было быть #{param.controller}. И чтобы заставить его работать, #{param.controller} должен уже быть там во время первоначального запроса. Он не устанавливает автоматически значение в последующем запросе, как вы ожидаете. Для этого вам нужно <h:inputHidden value="#{mailSender.controllerName}"/>.

...