我刚刚开始学习接缝框架。我决定编写两个下拉菜单。一个列表类别和其他列出子类别。这个想法是用户将首先选择一个类别,并根据该类别填充子类别。
<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()方法,但它不起作用。
我在这里做错了什么?
感谢。
答案 0 :(得分:1)
你可能不想做任何事情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;