我有带有链接的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>
豆.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页面并单击"制作一些逻辑.."按钮后,doSomething()
方法中的所有代码都将运行。当此方法结束时,我从中返回,我得到 NullPointerException,因为我必须在getId()
方法中获取id
参数。这意味着我失去了视图参数id
.为什么?
编辑
相关问题:丢失视图页面参数
当您单击命令按钮时,将使用HTTP POST提交表单,如果您检查URL,则其中不包含参数ID。
在 f:metadata
标记中,指定一个值属性以将参数绑定到 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>