jsf bean 中的 f:param 为 null

2024-01-25

我的问题是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 中的按钮时,我会调用方法,并尝试获取参数,但它为空

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

The <f:param>添加请求参数。所以这个参数的生命周期恰好是一个 HTTP 请求。你有一个<redirect/>在您的导航案例中,它基本上指示网络浏览器发送new对给定位置的请求。这个新请求不再包含该参数。

你基本上有两个选择:

  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>
    

也可以看看:

  • JSF 2.0 中的通信 - 处理 GET 请求参数 http://balusc.blogspot.com/2011/09/communication-in-jsf-20.html#ProcessingGETRequestParameters
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jsf bean 中的 f:param 为 null 的相关文章

随机推荐