为什么我失去了视图参数值



我有带有链接的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>

相关内容

  • 没有找到相关文章

最新更新