Создайте выпадающее меню во шве с 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
задан leppie 1 July 2010 в 12:02
поделиться

2 ответа

Вот мой компонент:


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

/ pre>

1
ответ дан 2 September 2019 в 23:22
поделиться
  1. Ваш # {manager.categories} уже заполнен?
  2. Что делает # {manager.dothis ()}?

Вероятно, вы не хотите ничего делать onfocus () ... если только вы не ленитесь загружать начальные значения ( что я не думаю, что вы). Вам также следует перерисовать что-то в теге , иначе ваше действие не повлияет ни на что на вашей странице.

Вот мой подход к ним (предполагается, что # {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
ответ дан 2 September 2019 в 23:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: