我有AAA.jsf页面,链接:
<h:link value="To BBB" outcome="BBB">
<f:param name="id" value="10"/>
</h:link>
BBB.jsf:
<html>
<h:body>
<f:metadata>
<f:viewParam name="id"/>
</f:metadata>
<h:form>
<h:outputText value="#{bean.id}"/>
<h:commandButton value="Make some logic.." action="bean.doSomething"/>
</h:form>
</h:body>
</html>
Bean.class:
@ManagedBean
@ViewScoped
class Bean{
public String getId(){
Map<String,String> param = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
return param.get("id");
}
public void doSomething(){
//do some logic....
//I don't use id parameter
}
}
从AAA页面进入BBB页面并点击“Make some logic ..”按钮后,运行doSomething()
方法的所有代码。当这个方法结束并且我从我返回时得到NullPointerException,因为我必须在id
方法中获得getId()
param。这意味着我失去了viewParam id
。为什么呢?
修改
相关问题: lose view page parameter
答案 0 :(得分:1)
当您单击commandButton时,表单将使用HTTP POST提交,如果您检查URL,则其中不包含参数ID。
在f:metadata
标记中,指定value属性以将param绑定到bean属性。然后,您可以使用相同的bean属性在bean中使用该值。
<f:metadata>
<f:viewParam name="id" value="#{bean.value}/>
</f:metadata>
在bean中,定义一个新变量来设置Id的值,并提供其getter和setter方法。
或强>
在commandButton中使用f:param可以在提交后访问该参数。
<h:commandButton value="Make some logic.." action="bean.doSomething">
<f:param name="id" value="10"/>
<h:commandButton>