Я читал в других темах, что это не работает:
<h:commandButton value="Create New Account"
action="#{acctBean.doCreate}" >
<f:param name="acctName" value="#{acctBean.handle}" />
<f:param name="acctNo" value="#{acctBean.id}" />
</h:commandButton>
Метод doCreate()
вернет переход на страницу "поздравления", если он создаст учетную запись. Целевая страница может затем разрешить #{param.handle}
и #{param.id}
.
Я знаю, что это будет работать, если я буду использовать h:commandLink
, но мне нужна кнопка, а не ссылка. Есть ли общепринятый способ сделать это?
UPDATE:
Основываясь на первом ответе @BalusC, я создал следующий тестовый код:
<h:commandButton value="Push Me" action="goAcctCreated" >
<f:param name="acctName" value="This Is Account Name" />
<f:param name="acctNo" value="1234" />
</h:commandButton>
<h:button value="Push Me #2" outcome="newAcct" >
<f:param name="acctName" value="This Is Account Name" />
<f:param name="acctNo" value="1234" />
</h:button>
И на целевой странице у меня есть:
<p>You may now log in with the account you just created: <b>#{param['acctName']}</b>.</p>
<p>This is account number <b>#{param['acctNo']}</b>.</p>
Как и прежде, h:commandButton
не работает с транзакцией POST, и, как сказал BalusC, h:button
выполняет GET и работает.
Интересно, что на POST, который h:commandbutton
делает, имеет закодированные параметры, как видно из Firebug:
acctName This Is Account Name
acctNo 1234
javax.faces.ViewState 8642267042811824055:-4937858692781722161
testForm testForm
testForm:j_idt55 testForm:j_idt55
Таким образом, теги f:param
, по крайней мере, выполняют свою работу, но целевая страница не разрешает выражения EL #{param[xxx]}
. Они также не отображаются в отчете по переменным в области видимости (ctrl-shift-D). Есть ли что-то, что я должен сделать на целевой странице?