f:bean jsf中的param为null

时间:2011-12-18 22:41:10

标签: java jsf redirect xhtml

我的问题是bean中的参数值为null

在xhtml中我有这段代码:

<h:commandLink action="#{navigation.editNews}" value="#{new.title}">            
  <f:param name="newsId" value="#{new.id}" />      
</h:commandLink>

在导航中,我重定向到news.xhtml

public String editNews(){
    return "editNews";
}

这是faces-config.xml

中的代码
<navigation-case>
  <from-action>#{navigation.editNews}</from-action>
  <from-outcome>editNews</from-outcome>
  <to-view-id>/news.xhtml</to-view-id>
  <redirect />
</navigation-case>

我有一个bean,当我按下news.xhtml中的按钮时我调用方法,我尝试获取param但是它为null

FacesContext fc = FacesContext.getCurrentInstance();
Map<String,String> params = fc.getExternalContext().getRequestParameterMap();
String = params.get("newsId"); 

1 个答案:

答案 0 :(得分:5)

<f:param>添加了一个请求参数。因此,此参数的生命周期恰好为一个HTTP请求。您的导航案例中有<redirect/>,它基本上指示Web浏览器在给定位置发送请求。此新请求不再包含该参数。

你基本上有两种选择:

  1. 在导航案例中摆脱<redirect />

  2. 改为使其成为普通的GET请求。如果您使用的是JSF2,请改用<h:link>

    <h:link action="news" value="#{news.title}">            
        <f:param name="newsId" value="#{news.id}" />      
    </h:link>
    

    或者如果你仍然使用JSF 1.x(由于新的隐式导航功能,导航案例的使用更少或更多提示,因为它们在JSF 2中是多余的;或者你必须阅读过时的教程/书籍/针对JSF 1.x的答案;在您的问题上缺少JSF 2.0标记是可疑的),然后使用普通的<a>链接。

    <a href="news.xhtml?newsId=#{news.id}">#{news.title}</a>
    
  3. 另见: