<f:view>
<h:form>
<h:panelGrid>
<f:facet name="header">
<h:outputText value="Create Order"/>
</f:facet>
<h:column>
<h:outputText value="Customer Number : "></h:outputText>
<h:inputText value="#{SalesCreate.orderBean.customerNumber}"/>
</h:column>
<h:column>
<h:outputText value="Create With : "></h:outputText>
<h:selectOneMenu id="createWith" value="#{SalesCreate.orderBean.createWith}">
<f:selectItem itemLabel="Without Reference" itemValue="noRef"/>
<f:selectItem itemLabel="Reference" itemValue="ref"/>
</h:selectOneMenu>
</h:column>
<h:column>
<h:outputText value="Reference By : "></h:outputText>
<h:selectOneMenu id="refBy" value="#{SalesCreate.orderBean.referenceBy}">
<f:selectItem itemLabel="Quotation" itemValue="quotation"/>
<f:selectItem itemLabel="Contract" itemValue="contract"/>
</h:selectOneMenu>
</h:column>
<h:column>
<h:outputText value="Inquiry Reference Number : "></h:outputText>
<h:inputText id="docNum" value="#{SalesCreate.orderBean.referenceNum}"/>
<h:commandButton value="..." onclick="javascript:popUp('OpenRef.jsp',this)">
</h:commandButton>
<h:commandButton value="Load" action="#{SalesCreate.getQuotationListFromDb}"> </h:commandButton>
</h:column>
</h:panelGrid>
</h:form>
</f:view>
上面是我的包含
selectOneMenu
的JSP,仅当用户在上一个字段中选择referenceBy
时,我才尝试启用字段withReference
。同样取决于referenceBy
的值,弹出窗口中的值也应不同,即,id用户选择referenceBy
作为quotation
,弹出窗口中的值应与quotation
相关。弹出JSP包含一个带有来自数据库的值的数据表。
最佳答案
在新的JSF 2.0 ajax功能的帮助下,使用<f:ajax>
来重新渲染第二个下拉列表,并且当第一个下拉列表的值不是disabled
时,使用ref
属性禁用第二个下拉列表。 。
<h:selectOneMenu id="createWith" value="#{SalesCreate.orderBean.createWith}">
<f:selectItem itemLabel="Without Reference" itemValue="noRef"/>
<f:selectItem itemLabel="Reference" itemValue="ref"/>
<f:ajax render="refBy" />
</h:selectOneMenu>
...
<h:selectOneMenu id="refBy" value="#{SalesCreate.orderBean.referenceBy}" disabled="#{SalesCreate.orderBean.createWith != 'ref'}">
<f:selectItem itemLabel="Quotation" itemValue="quotation"/>
<f:selectItem itemLabel="Contract" itemValue="contract"/>
</h:selectOneMenu>