2010-03-29 2 views
1

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

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

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

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

ответ

3

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

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

+0

@BalusC: из вашего ответа я понимаю, что задал очень неясный вопрос, и именно поэтому вы решили сразу ответить на все возможные «истинные» значения. В любом случае, это полезно, как обычно. – Roman

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