h:未调用dataTable辅助bean

时间:2015-08-05 08:34:11

标签: jsp jsf-2 datatable cdi websphere-8

在JSP中,我使用h:dataTable标记,其值设置为指向我的getter方法,该方法又返回一个对象列表。问题是永远不会调用getListSignataireExceptions并且表是空的。

请注意,AdministrationBean已初步完成,如果我将#{administrationBean.listSignataireExceptions}放在表格标记之外,我会以非格式化方式获取屏幕上的对象列表。

同样适用于#{administrationBean.message} - 没有消息,不会调用辅助bean。

JSP:

<div class="content">
    Administration des Exceptions signataires
    <h:dataTable id="table1" value="#{administrationBean.listSignataireExceptions}" var="item"
                 border="1">
        <f:facet name="header">
            <h:outputText value="Your Shopping Cart" />
        </f:facet>
        <h:column>
            <f:facet name="header">
                <h:outputText value="Item Description" />
            </f:facet>
            <h:outputText value="#{item.idSociete}" />
        </h:column>
        <h:column>
            <f:facet name="header">
                <h:outputText value="Price" />
            </f:facet>
            <h:outputText value="#{item.idAnnuaireSalarie}" />
        </h:column>
        <f:facet name="footer">
            <h:outputText value="Total: #{administrationBean.message}" />
        </f:facet>
    </h:dataTable>
</div>

支持bean:

@Named
@SessionScoped
public class AdministrationBean implements Serializable {
    private static final long serialVersionUID = 1L;
    @Inject
    private AdministrationService service;

    public String getMessage(){
        return "test test";
    }

    public List<DtoSignataireException> getListSignataireExceptions(){
        return service.listSignatairesExceptions();
    }
}

1 个答案:

答案 0 :(得分:0)

问题与我们的Java EE容器有关 - WebSphere 8。 正如下面的问题中所提到的,显然CDI只适用于WebSphere - MyFaces中的默认JSF实现。

CDI Bean not found from JSF page

我们的应用程序使用Mojarra,因此Mojarra创建的容器不会被OpenWebBeans(WAS CDI实现)接收。

解决方案是添加CDI启用程序,如下文所述。这通过不同的容器桥接CDI。唯一的区别是在我的环境中,我没有添加

<alternatives>
    <class>com.oracle.cdi_enabler.CdiConversation</class>
</alternatives>

https://weblogs.java.net/blog/mriem/archive/2013/12/10/jsf-tip-54-enable-cdi-when-bundling-jsf

另一个解决方案是在faces-config中声明所需的EL解析器,如下所示:

<application>
       <el-resolver>org.apache.webbeans.el.WebBeansELResolver</el-resolver>
  ..
<application>

您应该通过CDI实施的EL解析器替换WebBeansELResolver。在这种情况下,我们使用WAS容器提供的OpenWeb Bean