0

フロントエンドで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サーバーで実行しています。ご協力いただきありがとうございます。

4

0 に答える 0