使用的技术:
JSF 2
素数面
问题陈述:
我们有一个下拉列表,如下所示-
<h:selectOneMenu value ="#{bean.value}">
<f:ajax event="change" listener="#{bean.processValue}"
render="{one,two or panel}" /> //render correct id based on approach
<f:selectItem itemValue = "1" itemLabel = "Item 1" />
<f:selectItem itemValue = "2" itemLabel = "Item 2" />
<f:selectItem itemValue = "3" itemLabel = "Item 3" />
<f:selectItem itemValue = "4" itemLabel = "Item 4" />
</h:selectOneMenu>
如果用户选择项目2,将显示一个按钮,单击该按钮将打开弹出菜单。
如果用户选择项目1、3或4,则会显示另一个按钮,单击该按钮时会触发业务操作。
我们能够为
h:selectOneMenu
使用
f:ajax
。
我们正在使用
render
的属性
f: 阿贾克斯
这很好用。
问题是如何在AJAX响应上设计两个按钮。
不使用JSTL接近一个:
<h:commandButton id="one" value="Submit" onClick="openPopup" rendered="#{bean.render}">
<h:commandButton id="two" value="Submit" action="#{bean.businessAction}" rendered="#{bean.render}">
哪里
#{bean.render}
将检查单击的项目的值并返回真/假。
使用JSTL的方法二:
在同一个panelGrid中包裹两个按钮,并仅渲染panelGrid。在panelGrid中使用JSTL控制渲染。
<h:panelGrid id="panel">
<c:choose>
<c:when test = "${itemVlaue == 2}"> // use appropriate EL expression
<!-- render command button 1 to open pop up -->
</c:when>
<c:when test = "${itemVlaue == 1 or 3 or 5 }"> // use appropriate EL expression
<!-- render command button 2 to invoke action -->
</c:when>
</c:choose>
</h:panelGrid>
我在互联网上搜索过,似乎第一种方法更正确,因为不建议在JSF中使用JSTL来控制渲染。
但问题是:
当只使用一个命令按钮时,我们最终创建了两个命令按钮。
另外,如果两个命令按钮只需要一个id,该怎么办。这是在任何时候都只有一个人应该准时到场。
请给出建议