为什么我失去了viewParam值?

时间:2013-12-27 22:07:29

标签: jsf jsf-2 parameters navigation nullpointerexception

我有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

1 个答案:

答案 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>