Могу ли я "передать" объект с тегом параметра JSF?

То, что я ищу, это иметь тег f: param с объектом, который я сам выбираю в атрибуте value. Затем, в режиме поддержки bean для действия, я хотел бы иметь возможность вытащить этот объект из запроса. (Извините, если моя терминология не так хороша, я новичок в JSF).

Теперь я могу передать строки в параметрах запроса просто отлично. Я также понимаю, что параметр всегда будет String в http get или post, поэтому я не передаю java-объект. Я также понимаю, что способ сделать это состоял бы в том, чтобы передать "id" некоторого типа, который подсистема bean могла бы затем использовать для идентификации объекта, о котором идет речь.

Что мне интересно, однако, если JSF позволит мне сделать это прозрачно. Можно ли указать какой-либо объект в качестве значения параметра, а затем просто извлечь его из RequestMap в методе действий?

Ответы

Ответ 1

Вы не можете сделать это с помощью <f:param>. Он должен быть добавлен к URL-адресу запроса, поэтому он действительно должен быть String. Просто используйте <f:setPropertyActionListener> вместо этого.

например.

<h:commandLink value="Submit" action="#{bean.submit}">
    <f:setPropertyActionListener target="#{bean.otherBean}" value="#{otherBean}" />
</h:commandLink>

Таким образом, #{otherBean} доступен только как this.otherBean внутри метода submit(). Таким образом, вам также не нужно возиться с картой параметров запроса (для которой в случае <f:param> вместо этого я предпочел бы использовать инъекцию управляемого свойства с помощью #{param.name}).

Альтернативы используют <h:inputHidden> в сочетании с Converter или с помощью Tomahawk <t:saveState>. Также см. эту статью в блоге для получения дополнительной информации и примеров.