2010-07-01 111 views
1

我剛剛開始學習seam框架。我決定編寫兩個下拉菜單。一個列表類別和其他列表子類別。這個想法是,用戶將首先選擇一個類別,並取決於一個子類別將被填充。用s創建下拉菜單:selectItems

<h:selectOneMenu value="#{manager.category}" required="true"> 
      <a:support event="onfocus" ajaxSingle="true" action="#{manager.dothis()}"/> 
      <s:selectItems value="#{manager.categories}" var="cat" label="#{cat.categoryDescription}" noSelectionLabel="Select a Category"/> 
      <s:convertEntity /> 

以上,我想打電話給dothis()事件的焦點,但它不工作方法。

我在這裏做錯了什麼?

謝謝。

回答

1
  1. 您的#{manager.categories}已經填充了嗎?
  2. #{manager.dothis()}做了什麼?

你可能不想做任何事情onfocus() ...除非你可能懶惰加載初始值(我認爲你不是)。您還應該重新編輯<a:support>標記中的內容,否則您的操作不會影響您網頁上的任何內容。

這裏是我的方式來處理(假設#{} manager.categories填充):

<h:selectOneMenu id="category" value="#{manager.category}" required="true"> 
      <a:support event="onchange" ajaxSingle="true" action="#{manager.populateSubCategories()}" reRender="subcategory"/> 
      <s:selectItems value="#{manager.categories}" var="cat" label="#{cat.categoryDescription}" noSelectionLabel="Select a Category"/> 
      <s:convertEntity /> 
</h:selectOneMenu> 

<h:selectOneMenu id="subcategory" value="#{manager.subcategory}" required="true"> 
      <s:selectItems value="#{manager.subcategories}" var="subcat" label="#{subcat.categoryDescription}" noSelectionLabel="Select a Sub-Category"/> 
      <s:convertEntity /> 
</h:selectOneMenu> 
1

這裏是我的豆:


@Stateful 
@Name("requestManager") 
public class RequestManagerBean implements RequestManager 
{ 
    @Logger private Log log; 

    @In StatusMessages statusMessages; 

    private Category category; 

    private Subcategory subcategory; 

    @Out(required=false) 
    private List categories; 

    private List subcategories; 

    @PersistenceContext 
    EntityManager entityManager; 
    public void createRequest() 
    { 
     // implement your business logic here 
     log.info("manager.createRequest() action called with: #{manager.value}"); 
     statusMessages.add("createRequest #{manager.value}"); 
    } 

    public Category getCategory() { 
     return category; 
    } 

    public void setCategory(Category category) { 
     this.category = category; 
    } 


    public Subcategory getSubcategory() { 
     return subcategory; 
    } 

    public void setSubcategory(Subcategory subcategory) { 
     this.subcategory = subcategory; 
    } 

    public List getCategories() { 
     return categories; 
    } 

    public void setCategories(List categories) { 
     this.categories = categories; 
    } 

    public List getSubcategories() { 
     //System.out.println("returning " + subcategories.size() + "subcategories.."); 
     return subcategories; 
    } 

    public void setSubcategories(List subcategories) { 
     this.subcategories = subcategories; 
    } 

    @Destroy 
    @Remove 
    public void destroy() {} 

    @Factory("categories") 
    public void loadCat() { 
     System.out.println("loadCat called.........."); 
     categories = entityManager.createQuery("select c from Category c order by c.categoryDescription").getResultList(); 
    } 

    public void callme() { 

     System.out.println("callme............"); 
     subcategories = category.getSubcategoryList(); 
     System.out.println(subcategories.size()); 
    } 
}

和形式

 

<rich:panel> <f:facet name="header">Create Request</f:facet> <h:outputText value="Category: "/> <h:selectOneMenu id="categoryField" value="#{requestManager.category}"> <s:selectItems var="cat" value="#{categories}" label="#{cat.categoryDescription}" noSelectionLabel="Select a Category"/> <s:convertEntity /> <a:support event="onchange" ajaxSingle="true" action="#{requestManager.callme}" reRender="subcategoryField" /> </h:selectOneMenu> <br /> <br /> <h:outputText value="Subcategory: "/> <h:selectOneMenu id="subcategoryField" value="#{requestManager.subcategory}" required="true"> <s:selectItems value="#{requestManager.subcategories}" var="subcat" label="#{subcat.subcategoryDescription}" noSelectionLabel="Select a Sub-Category"/> <s:convertEntity /> </h:selectOneMenu> <div style="clear:both"/> </rich:panel> <div class="actionButtons"> <h:commandButton id="createRequest" value="Submit" action="#{requestManager.createRequest}"/> </div> </h:form>

/預>

+0

@alkesh使用@Factory它被評估一次,只是一次。建議:當你想發表評論時,不要使用發佈答案。查看鏈接添加評論 – 2010-07-02 16:47:05

+0

@Factory和@Create有什麼區別?而且,由於某種原因,我嘗試了上面的代碼。manager.populateCategories()沒有被調用。另外,我會調試它。我正在使用log.debug(),但這些日誌存儲在哪裏? 謝謝你們,我感謝你抽出時間幫助我。 – Nish 2010-07-02 19:05:15

+0

好吧,所以我想出了Factory和Create之間的區別。 現在,只有問題是行動不在變化。 – Nish 2010-07-03 01:14:27