JSF-使用AJAX&;选择一个列表框
我想做的是简单地解释一下:JSF-使用AJAX&;选择一个列表框,ajax,jsf,jsf-2,facelets,Ajax,Jsf,Jsf 2,Facelets,我想做的是简单地解释一下: bean @ManagedBean @ViewScoped public class Articles { private String selectedMenu; @PostConstruct public void init() { if(selectedMenu==null || selectedMenu.trim().isEmpty()) { this.selectedMenu="0";
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; }
}
页面
<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>
菜单0
菜单1
菜单2
当我更改列表框的值时,菜单应该自动更改(通过调用服务器上的某些函数)。我认为上面的代码表达了我所寻找的
我必须知道如何使用onchange选项来调用它。可能吗
干杯
更新
<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>
菜单0
菜单1
菜单2
您可以使用JSF2内置的ajax支持来实现这一点。为此,在h:selectOneListbox标记中嵌套一个f:ajax标记。f:ajax标记应该如下所示:
<f:ajax render="loadMenu" execute="@this" />
这将处理列表框中更改的值,并重新呈现panelGroup
有关详细信息,请参阅:
是的,这应该有效。但当我改变聚焦元素时,我需要这样做。如“在更改时执行”:)添加
event=“change”
。但是,已是h:selectOneMenu
的默认事件。你试过了吗?正如Brian所建议的,这一行应该已经足够了。正如BalusC所指出的,您可以指定ajax事件触发的事件属性,其中事件是DOM事件。列表框的默认事件是“更改”。请参阅JSF2API以了解更多详细信息:好的,更改了列表框(您可以看到上面的代码),但是当我更改列表中的值时,不会发生任何事情。是的,它执行ajax调用:)它找不到渲染!您忘记将h:selectOneMenu
的值绑定到{articles.selectedMenu}
。