jsf ajax条件呈现不起作用

jsf ajax条件呈现不起作用,ajax,jsf,selectonemenu,Ajax,Jsf,Selectonemenu,我有一个带有selectonemenu的表单,其中有selectitems“D”和“F”,我想在选择“D”时呈现一些其他元素,如h:outputtext和h:inputtext,并在选择“F”时隐藏它们,我一直在关注这个问题,并试图对我的情况进行相同的处理,但出于某种原因,页面不响应SeleConeNu中选择的更改 my view.xhtml: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" x

我有一个带有selectonemenu的表单,其中有selectitems“D”和“F”,我想在选择“D”时呈现一些其他元素,如h:outputtext和h:inputtext,并在选择“F”时隐藏它们,我一直在关注这个问题,并试图对我的情况进行相同的处理,但出于某种原因,页面不响应SeleConeNu中选择的更改

my view.xhtml:

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:rich="http://richfaces.org/rich"
      xmlns:a4j="http://richfaces.org/a4j">
<h:head>
    <meta charset="utf-8" />
    <title>New item</title>

    <link rel="stylesheet" href="style.css" />
</h:head>
<h:body>
    <div id="wrapper">
        <header>
                <ul>
                    <li><h:outputLink value="index.xhtml">main</h:outputLink></li>
                    <li><h:outputLink value="reservations.xhtml">reservations</h:outputLink></li>
                    <li><h:outputLink value="items.xhtml">items</h:outputLink></li>
                    <li><h:outputLink value="revenue.xhtml">revenue</h:outputLink></li>
                    <li><h:outputLink value="statistics.xhtml">statistics</h:outputLink></li>
                </ul>
        </header>
        <div id="content">
            <div id="inner">
                <h:form  prependId="false">                 
                    <h:outputText value="Type:" />
                    <h:selectOneMenu id="type" value="#{newItemMB.type}">
                        <f:selectItem itemLabel="" itemValue="#{null}" noSelectionOption="true"/>
                        <f:selectItem itemLabel="Drink" itemValue="D" />
                        <f:selectItem itemLabel="Food" itemValue="F" />
                        <f:ajax execute="@form" render="selectInputPanel"/>
                    </h:selectOneMenu>
                        <h:outputText value="Name:" />
                        <h:inputText id="name" label="name">
                            <f:validateLength minimum="1"  maximum="100" />
                        </h:inputText>
                        <h:outputText value="Price:" />
                        <h:inputText id="price" label="price">
                            <f:validateLength minimum="1"  maximum="50" />
                        </h:inputText>
                    <h:panelGroup id="selectInputPanel">
                        <h:outputText rendered="#{newItemMB.isTypeD}" value="Size:" />
                        <h:inputText id="size" label="size" rendered="#{newItemMB.isTypeD}" />
                    </h:panelGroup>
                </h:form>
            </div>
        </div>      
        <footer>
            <h:outputText value="asd"></h:outputText>
        </footer>
    </div>
</h:body> 
</html>

我做错什么了吗?

您的
类型根本没有设置,因此它将始终是“D”。
即使我更改了SelectOne功能表。
您可以使用setter函数中的
System.out.println
自行检查

您需要指定何时激活

此外,
execute
属性是提交信息,因此如果您没有键入任何内容并选择食物选项,验证将失败,因此支持bean将不会执行。
如果您尝试在名称价格字段中键入某个内容并选择食品,您将发现大小字段消失

因此,使用
event
并删除
execute

像这样:

<f:ajax event="change" render="selectInputPanel"/>


我试过了,效果很好。

非常感谢!新年快乐
<f:ajax event="change" render="selectInputPanel"/>