【问题标题】:why i lose viewParam value?为什么我失去 viewParam 价值?
【发布时间】:2013-12-27 22:07:29
【问题描述】:

我有带有链接的 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 因为我必须在getId() 方法中获取id 参数。这意味着我失去了 viewParam id。为什么?

编辑

相关问题: lose view page parameter

【问题讨论】:

  • 你在doSomething方法中使用参数吗?
  • 不,我不在那里使用它

标签: jsf jsf-2 parameters navigation nullpointerexception


【解决方案1】:

当你点击 commandButton 时,表单是使用 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>

【讨论】:

  • 我可以不保存参数值到 bean 中吗?
  • @kuba44 编辑了我的答案
猜你喜欢
  • 2011-11-18
  • 1970-01-01
  • 2016-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-23
  • 1970-01-01
相关资源
最近更新 更多