Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSF-使用AJAX&;选择一个列表框_Ajax_Jsf_Jsf 2_Facelets - Fatal编程技术网

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}