Создать выпадающее меню в шов с помощью s: selectItems - PullRequest
1 голос
/ 01 июля 2010

Я только начал изучать структуру шва. Я решил закодировать два выпадающих меню. Один список категорий и другой список подкатегории. Идея состоит в том, что пользователь сначала выберет категорию и, в зависимости от этого, будет заполнена подкатегория.

<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 ]

1 голос
/ 02 июля 2010

Вот мой боб:


@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());
    }
}

и форма

    </p>

<code>    <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>
</code>

/ pre>

1 голос
/ 02 июля 2010
  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>
...