我想将GET参数从URL传递给方法,通过单击按钮调用该方法。 例如,我有网址: /someurl/semepage.xhtml?id=1 。我的页面上有一个按钮:
<p:commandButton value="say it" action="#{test.sayIt(param['id'])}"/>
豆看起来像:
@ManagedBean
@ViewScoped
public class Test{
public void sayIt(String value){
System.out.println(value);
}
}
但是当我点击按钮时,它只是没有反应。为什么会这样? 方法甚至没有被调用。
如果我像这里一样传递参数:
<p:commandButton value="say it" action="#{test.sayIt('someword')}"/>
一切都很好。
答案 0 :(得分:5)
@Daniel的回答没问题,但是这里使用<f:viewParam />
和EL参数传递,为你的情况提供了一个更简单的JSF 2-ish替代方案。请注意,在这种情况下不需要<f:ajax />
,因为<p:commandButton />
默认情况下具有ajax行为。
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:head />
<h:body>
<f:metadata>
<f:viewParam name="id" />
</f:metadata>
<h:form>
<p:commandButton value="say it" action="#{bean.sayIt(id)}" />
</h:form>
</h:body>
</html>
@ManagedBean
@ViewScoped
public class Bean implements Serializable {
public void sayIt(String value) {
System.out.println(value);
}
}
使用JSF 2.2.5和Primefaces进行测试4.请记住在使用JSF 2.1.x的情况下更改标记名称空间。
答案 1 :(得分:3)
这是一种方法 - 使用<f:param
,如下所示:
<h:commandButton value="Test The Magic Word" action="#{test.sayIt}">
<f:param name="id" value="#{param['id']}"></f:param>
<f:ajax execute="something" render="something_else"></f:ajax>
</h:commandButton>
在你的豆子里
HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext()
.getRequest();
String id = request.getParameter("id");
答案 2 :(得分:1)
只是为了好玩,你试过request.getParameter('id')
吗?