f: param не работает с p: commandLink или h: commandLink в строке запроса
f:param
прекрасно работает сh:link
, но не сp:commandLink
или жеh:commandLink
.
Например, у меня есть две страницыtest_first.xhtml
а такжеtest_second.xhtml
и поддерживающий боб JavaTestBean.java
.
Я начинаю бегатьtest_first.xhtml
.
Если я нажмуlink1
, который являетсяh:link
, страница будет перенаправлена наtest_second.xhtml
, С помощьюf:param
, адресная строка браузера покажет.../test_second.xhtml?id=1
, На этой страницеtestBean.userId
печатается.
Если я нажмуlink2
или жеlink3
, страница перенаправляет наtest_second.xhtml
, Тем не менее, адресная строка показывает только.../test_second.xhtml
, здесь нет?id=#
! А такжеtestBean.userId
не печатается на этой странице.
Как я могу сделатьcommandLink
работать сf:param
? Иногда я хочу, чтобы ссылка не перенаправляла на другую страницу, а вызывала некоторые методы bea, n в зависимости от данных.
test_first.xhtml:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:head/>
<h:body>
<h:form>
<h:link value="link1" outcome="test_second" >
<f:param name="id" value="1"/>
</h:link>
<br/><br/>
<h:commandLink value="link2" action="test_second?faces-redirect=true" >
<f:param name="id" value="2" />
</h:commandLink>
<br/><br/>
<p:commandLink value="link3" action="test_second?faces-redirect=true">
<f:param name="id" value="3" />
</p:commandLink>
<br/><br/>
</h:form>
</h:body>
</html>
test_second.xhtml:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<f:metadata>
<f:viewParam name="id" value="#{testBean.userId}" />
</f:metadata>
<h:head/>
<h:body>
<h:form>
This is the second page.
<h:outputText value="Selected id is #{testBean.userId}" />
<h:commandButton value="Print page id" action="#{testBean.print()}" />
</h:form>
</h:body>
</html>
TestBean.java
@ManagedBean
@SessionScoped
public class TestBean implements Serializable{
private Integer userId;
public void print() {
System.out.println(userId);
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
}