在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();
}
}
答案 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