我的问题是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");
答案 0 :(得分:5)
<f:param>
添加了一个请求参数。因此,此参数的生命周期恰好为一个HTTP请求。您的导航案例中有<redirect/>
,它基本上指示Web浏览器在给定位置发送新请求。此新请求不再包含该参数。
你基本上有两种选择:
在导航案例中摆脱<redirect />
。
改为使其成为普通的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>