我有一个在前端运行 JSF2.0 的应用程序。在后端,而不是使用托管 bean,我使用了焊接的命名 bean。有问题的 bean 被注释为 @Named @Singleton @Startup 并且是一个 EJB Singleton。bean 获取顶级类别来填充前端。在前端的顶级导航中,我的代码看起来像这样
<h:dataTable var="items" value="#{topCategorySingleton.topCat}">
<h:column>
<h:commandLink class="menu-link" action="#{categoryBackingBean.category}">
<f:setPropertyActionListener target="#{categoryBackingBean.catID}" value="#{item.sku}" />
<h:outputText value="#{item.title}" />
</h:commandLink>
</h:column>
</h:dataTable>
当此代码运行时,我收到一条错误消息,指出 javax.servlet.ServletException:类 'com.webintel.backingbeans.org$jboss$weld$bean-testing-SessionBean-CategoryBackingBean_$$_WeldProxy' 没有属性 'category'。
我认为 commandLink 的 action 属性应该绑定到 bean 的方法,而不是属性?有人有想法么?
启动时@Singleton 启动,代码如下:
@Singleton
@Named
@Startup
@ConcurrencyManagement(CONTAINER)
public class TopCategorySingleton{
public TopCategoryStingleton(){}
private int sku;
private String title;
private List<TopCategorySingleton> topCat;
....getters and setters
public void getTop_Cat(){
....logic
setTopCat(List<TopCateogrySingleton>);
}
然后支持 bean 代码如下所示:
@Stateless
@Named
@RequestScoped
public class CategoryBackingBean{
public CategoryBackingBean(){}
private int catID;
....getters and setters
public String category(){
...logic
if(!true){
return "error";
}
return "success";
}
由于某种原因,它仍然没有将 categoryBackingBean.category 绑定到该方法。我正在使用 Java 6 的 Glassfish 3.1 服务器上运行此应用程序。在此先感谢您的帮助。