使用s:selectItems在seam中创建下拉菜单

时间:2010-07-01 11:59:29

标签: java jsf seam facelets

我刚刚开始学习接缝框架。我决定编写两个下拉菜单。一个列表类别和其他列出子类别。这个想法是用户将首先选择一个类别,并根据该类别填充子类别。

<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()方法,但它不起作用。

我在这里做错了什么?

感谢。

2 个答案:

答案 0 :(得分:1)

  1. 您的#{manager.categories}是否已填充?
  2. #{manager.dothis()}做了什么?
  3. 你可能不想做任何事情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 :(得分: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>

/预&GT;