フロントエンドでJSF2.0を実行しているアプリケーションがあります。バックエンドでは、マネージドBeanを使用する代わりに、weldの名前付きBeanを使用しています。問題のBeanには、@ Named @Singleton @Startupという注釈が付けられ、EJBシングルトンです。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をメソッドにバインドしていません。このアプリは、Java6を搭載したGlassfish3.1サーバーで実行しています。ご協力いただきありがとうございます。