f:viewParam不在依赖项中工作或仅在请求范围内查看

时间:2013-06-08 15:10:47

标签: jsf jsf-2 scope cdi

我想知道我是否有相同的发现但是在创建了一个从jboss maven archetype生成的javaee6 web项目后,我得到了以下结果。

f:viewParam,仅在请求范围内不依赖于依赖或视图范围。

public class BaseBean {
    protected boolean edit;

    public boolean isEdit() {
        System.out.println("get edit=" + edit);
        return edit;
    }

    public void setEdit(boolean edit) {
        System.out.println("set edit=" + edit);
        this.edit = edit;
    }
}

@Named
@RequestScoped
public class RequestBean extends BaseBean { }

@Named
public class DependentBean extends BaseBean { }

@Named
@ViewScoped
public class ViewBean extends BaseBean { }

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    template="/WEB-INF/templates/default.xhtml">

    <ui:define name="metadata">
        <f:metadata>
            <f:viewParam name="edit" value="#{dependentBean.edit}" />
        </f:metadata>
    </ui:define>


    <ui:define name="content">
        <h:outputText value="#{dependentBean.edit}"></h:outputText>
    </ui:define>
</ui:composition>

对于请求和视图范围视图,除了使用的管理bean之外,它几乎与上面的视图相同。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

问题在于,您正在将来自包javax.faces.bean的JSF注释与来自包@Named的{​​{1}}的注意事项注意到的CDI注释混合)并且它们不能完全使用由不同的经理(JSF和CDI经理)处理。在您的应用程序中,您的托管bean应该来自JSF或来自CDI,而不是两者兼而有之。

请注意,CDI尚不支持javax.enterprise.context,此范围仅适用于JSF。更多信息:CDI missing @ViewScoped and @FlashScoped