2010-11-29 37 views
3

我想要做的就是简单解释创建动态菜单:JSF - 通过使用AJAX和selectOneListbox

bean

@ManagedBean 
@ViewScoped 
public class Articles { 
    private String selectedMenu; 

    @PostConstruct 
    public void init() { 
     if(selectedMenu==null || selectedMenu.trim().isEmpty()) { 
      this.selectedMenu="0"; 
     } 
    } 

    public String getSelectedMenu() { return selectedMenu; } 
    public void setSelectedMenu(String selectedMenu) { this.selectedMenu = selectedMenu; } 
} 

page

<h:selectOneListbox onchange="..?? ajax call that render on loadMenu and pass the value of the focused listbox to Articles Bean" id="category" size="0" > 
    <f:selectItem itemLabel="first" itemValue="0" /> 
    <f:selectItem itemLabel="second" itemValue="1" /> 
    <f:selectItem itemLabel="third" itemValue="2" /> 
</h:selectOneListbox> 

<h:panelGroup layout="block" id="loadMenu"> 
    <h:panelGroup rendered="#{articles.selectedMenu=='0'}"> 
     MENU 0 
    </h:panelGroup> 

    <h:panelGroup rendered="#{articles.selectedMenu=='1'}"> 
     MENU 1 
    </h:panelGroup> 

    <h:panelGroup rendered="#{articles.selectedMenu=='2'}"> 
     MENU 2 
    </h:panelGroup> 
</h:panelGroup> 

当我改变列表框的值,菜单应该改变(通过调用服务器上的某个功能)。我认为上面的代码表达了我正在寻找的东西。

我必须知道如何使用onchange选项来调用它。可能吗?

干杯

UPDATE

<h:panelGroup layout="block"> 
    <h:selectOneListbox styleClass="article_combo" size="0" id="selectedMenu" > 
     <f:selectItem itemLabel="first" itemValue="0" /> 
     <f:selectItem itemLabel="second" itemValue="1" /> 
     <f:selectItem itemLabel="third" itemValue="2" /> 

     <f:ajax event="change" execute="@this" render="loadMenu" /> 
    </h:selectOneListbox> 
</h:panelGroup> 

<h:panelGroup layout="block" id="loadMenu"> 
    <h:panelGroup rendered="#{articles.selectedMenu=='0'}"> 
     MENU 0 
    </h:panelGroup> 

    <h:panelGroup rendered="#{articles.selectedMenu=='1'}"> 
     MENU 1 
    </h:panelGroup> 

    <h:panelGroup rendered="#{articles.selectedMenu=='2'}"> 
     MENU 2 
    </h:panelGroup> 
</h:panelGroup>  

回答

3

您可以使用内置到JSF 2的Ajax支持来实现这一目标。为此,在h:selectOneListbox标签中嵌套一个f:ajax标签。在F:AJAX标签应该是这样的:

<f:ajax render="loadMenu" execute="@this" /> 

这应该处理您的列表框中改变的值,并重新呈现panelGroup中。

进一步详情,请参阅: http://mkblog.exadel.com/2010/04/learning-jsf-2-ajax-in-jsf-using-fajax-tag/

+0

是的,这应该工作。但是当我改变焦点元素时,我需要做到这一点。像“做onchange”:) – markzzz 2010-11-30 00:04:45