我有一个在前端运行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:类&#39; com.webintel.backingbeans.org $ jboss $ weld $ bean-testing-SessionBean-CategoryBackingBean _ $$ _ WeldProxy&#39;没有属性&#39;类别&#39;。
我认为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服务器上运行此应用程序。提前感谢您的帮助。