@ManagedProperty未在下一页中维护托管bean属性

时间:2011-08-16 14:36:23

标签: jsf-2

我是JSF的新手。在我的项目中使用@ManagedBean,@ RequestScoped。我在我的项目中使用了4页。我的问题是在第二页,第三页和第四页中没有维护bean值。我正确地使用了getter和setter。如果我不使用@ManagedProperty正确维护bean值。但我需要使用 @ManagedProperty。你能告诉我如何解决这个问题吗?我复制了一些示例代码供参考。

@ManagedBean
@RequestScoped
public class ArticlePrepToolManagedBean implements Runnable, Serializable {

    @ManagedProperty (value="#{param.jidName}")
    private String jidName;

    @ManagedProperty (value="#{param.aidName}")
    private String aidName;

    private List<com.elsevier.ArticlePrepTool.db.ItemZipContains> usabilityDetailList = null;

    public String getAidName() {
            return aidName;
    }

    public void setAidName(String aidName) {
            this.aidName = aidName;
    }

    public String getJidName() {
            return jidName;
    }

    public void setJidName(String jidName) {
            this.jidName = jidName;
    }

    public List<ItemZipContains> getUsabilityDetailList() {
         return usabilityDetailList;
    }

    public void setUsabilityDetailList(List<ItemZipContains> usabilityDetailList) {
       ArticlePrepToolManagedBean.usabilityDetailList = usabilityDetailList;
    }

}

我的项目网址是(http:// localhost:8080 / articlepreptool /),但我项目的输入是jidName = AEA aidName = 10663。某个其他网页提供的输入,如果用户使用以下href“PrepTool”触发。取决于输入我在项目数据库中获取了一些数据(使用JPA)并在第一页中列出数据。但是,如果我进入下一页,我从DB获得的所有先前存储在该列表中的数据都被清除,这是所有列表值,并且在bean中设置的变量变为空。所以你能告诉我如何解决这个问题。只有当我使用@ManagedProperty时才会出现这个问题。我使用@ManagedProperty通过url获取输入值,因为我的项目的输入值来自其他网页。

1 个答案:

答案 0 :(得分:1)

@ManagedProperty("#{param.foo}")基本上在bean构造之后将名称为"foo"的HTTP请求参数设置为bean属性。如果您正在为它们检索null值,那么它只是意味着HTTP请求中不存在这些参数。

假设您通过普通链接进行导航,那么您需要修复链接以包含请求参数:

<h:link value="Go to page2" outcome="page2">
    <f:param name="jidName" value="#{bean.jidName}" />
    <f:param name="aidName" value="#{bean.aidName}" />
</h:link>

这将导致类似:

<a href="page2.xhtml?jidName=foo&aidname=bar">

这样可以将这些参数设置为bean属性。

或者,您可以在所有网页上使用@ManagedProperty代替<f:viewParam>,并在结果中添加includeViewParams=true。另请参阅ViewParam vs @ManagedProperty(value = "#{param.id}")

如果您通过表单提交进行导航,那么实际上没有理由使用它们。或者您必须滥用表单而不是普通的页面到页面导航的链接。