Передача параметра с помощью h: commandButton - PullRequest
4 голосов
/ 19 июля 2010

У меня есть a4j: commandButton, который должен перенаправить меня на соответствующую страницу «Редактировать» на основе идентификатора, который я хотел передать в качестве параметра, что-то вроде этого:

<h:commandButton action="/details.jsf?faces-redirect=true" value="details">
    <f:attribute name="id" value="#{bean.id}" />
</h:commandButton>

Проблема в том, что это не работает. Я также попытался заменить атрибут f: на "f: param name =" id "value =" # {bean.id} "", но это также не удалось. Единственное, что мне нужно, это выходная ссылка:

<h:outputLink  value="/details.jsf">
    link
    <f:param name="id" value="#{bean.id}" />
</h:outputLink>

Но я не очень доволен ссылкой, так есть ли способ заставить команду Button работать?

Да, у меня также есть бин, который должен получить этот идентификатор после перенаправления:

@PostConstruct
public void init(){
    id= resolve("id");
}

Ответы [ 2 ]

6 голосов
/ 19 июля 2010

Посмотрите эту статью о связи в JSF, автор BalusC

f:param работает только с h:commandLink и h:outputLink.

Вы можете использовать скрытый ввод:

<h:form>
    <h:commandButton action="/details.jsf?faces-redirect=true" value="details"/>
    <input type="hidden" name="id" value="#{bean.id}" />
</h:form>

А потом, в вашем лице-конфиге, я полагаю, это объем запроса. Если вы используете аннотации JSF2, просто переведите их в соответствующие аннотации.

<managed-bean>
    <managed-bean-name>bean</managed-bean-name>
    <managed-bean-class>mypackage.Bean</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
    <managed-property>
        <property-name>id</property-name>
        <value>#{param.id}</value>
    </managed-property>
</managed-bean>

Очевидно, вам нужно иметь методы получения и установки для этого поля в компоненте поддержки.

или попробуйте "нарисовать" ссылку в виде кнопки через CSS.

1 голос
/ 19 июля 2010

Если мой JSF не очень ржавый, атрибут action в кнопке команды или ссылке на команду используется для указания строки результата, определенной в вашем файле Face-Config-Nav, или он должен указывать на метод в компоненте, который будет возвращатьрезультат (или перенаправление / что угодно).

В вашем случае, если вы хотите перенаправить на другую страницу ... вы должны определить это в своем конфигурационном файле, как навигационную ссылку (с redirect, если необходимо).).Тогда в вашей кнопке действия у вас должно быть что-то вроде

<h:commandButton action="showDetails" value="details">

...

<navigation-case>
        <from-outcome>showDetails</from-outcome>
        <to-view-id>/details.jsf?faces-redirect=true</to-view-id>
</navigation-case>

Кроме того, тег <f:atribute> будет работать, но он будет только устанавливать атрибутна компонент.Таким образом, если вы получили командную кнопку в своем бине, вы можете получить значение атрибута по имени.Чтобы передать параметр запроса, используйте метод скрытого поля, например pakore упомянутый

...