h:dataTable 未调用辅助 bean
h:dataTable backing bean not called
在 JSP 中,我使用了一个 h:dataTable
标记,其值设置为指向我的 getter 方法,后者又 returns 一个对象列表。问题是 getListSignataireExceptions
从未被调用并且 table 是空的。
请注意,AdministrationBean
已正确初始化,如果我将 #{administrationBean.listSignataireExceptions}
放在 table 标记之外,我将以非格式化方式在屏幕上获取对象列表。
同样适用于 #{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();
}
}
问题与我们的 Java EE 容器 - WebSphere 8 有关。
正如下面问题中提到的,CDI 显然只适用于 WebSphere 中的默认 JSF 实现 - MyFaces。
CDI Bean not found from JSF page
我们的应用程序使用 Mojarra,因此 OpenWebBeans(WAS CDI 实现)不会使用 mojarra 创建的容器。
解决方案是添加 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>
您应该将 WebBeansELResolver 替换为 CDI 实现的 EL 解析器。在这种情况下,我们使用 WAS 容器提供的 OpenWeb Beans
在 JSP 中,我使用了一个 h:dataTable
标记,其值设置为指向我的 getter 方法,后者又 returns 一个对象列表。问题是 getListSignataireExceptions
从未被调用并且 table 是空的。
请注意,AdministrationBean
已正确初始化,如果我将 #{administrationBean.listSignataireExceptions}
放在 table 标记之外,我将以非格式化方式在屏幕上获取对象列表。
同样适用于 #{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();
}
}
问题与我们的 Java EE 容器 - WebSphere 8 有关。 正如下面问题中提到的,CDI 显然只适用于 WebSphere 中的默认 JSF 实现 - MyFaces。
CDI Bean not found from JSF page
我们的应用程序使用 Mojarra,因此 OpenWebBeans(WAS CDI 实现)不会使用 mojarra 创建的容器。
解决方案是添加 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>
您应该将 WebBeansELResolver 替换为 CDI 实现的 EL 解析器。在这种情况下,我们使用 WAS 容器提供的 OpenWeb Beans