Я только что начал изучать платформу шва. Я решил кодировать два выпадающих меню. Категории списка и другая подкатегория списка. Идея состоит в том, что пользователь сначала выберет категорию и в зависимости от которого будет заполнена подкатегория.
<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 () методом на фокусе события, но не работа.
Что я делаю неправильно здесь?
Спасибо.
Вот мой компонент:
@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>
Вероятно, вы не хотите ничего делать 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>