Jsf 两个不同h:commandButton操作的条件呈现

Jsf 两个不同h:commandButton操作的条件呈现,jsf,jstl,commandbutton,conditional-rendering,ajax-update,Jsf,Jstl,Commandbutton,Conditional Rendering,Ajax Update,使用的技术: JSF2 素面 问题陈述: <h:commandButton id="one" value="Submit" onClick="openPopup" rendered="#{bean.render}"> <h:commandButton id="two" value="Submit" action="#{bean.businessAction}" rendered="#{bean.render}"> 我们有一个下拉列表,如下所示- <h:select

使用的技术:

JSF2

素面

问题陈述:

<h:commandButton id="one" value="Submit" onClick="openPopup" rendered="#{bean.render}">
<h:commandButton id="two" value="Submit" action="#{bean.businessAction}" rendered="#{bean.render}">
我们有一个下拉列表,如下所示-

<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>          
其中
#{bean.render}
将检查单击的项的值并返回true/false

使用JSTL实现第二种方法:

<h:commandButton id="one" value="Submit" onClick="openPopup" rendered="#{bean.render}">
<h:commandButton id="two" value="Submit" action="#{bean.businessAction}" rendered="#{bean.render}">
将两个按钮包裹在同一个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>

//使用适当的EL表达式
//使用适当的EL表达式
我在互联网上搜索过,第一种方法似乎更正确,因为不建议在JSF中使用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>
但问题是:

当只使用一个命令按钮时,我们最终创建了两个命令按钮

另外,如果两个命令按钮只需要一个id怎么办。这是唯一一个在任何时间点都应该在场的人


请告知

您的Y型问题的答案如下:

您的X问题回答如下:

<h:selectOneMenu value="#{bean.value}">
   ...
   <f:ajax listener="#{bean.processValue}" render="oneAndOnly" />
</h:selectOneMenu>
...
<h:commandButton id="oneAndOnly" value="Submit"
    onclick="#{bean.render ? 'openPopup();return false;' : ''}"
    action="#{bean.businessAction}">
</h:commandButton>

...
...

换句话说,只要让它有条件地呈现onclick属性本身,它返回
false

您的问题确实令人困惑。该标记仅在JSF2.0中引入。但是将JSTL与JSF混合时的问题只适用于JSF1.x。你真正使用的是哪个JSF版本?@Balusc-我的错误。我已经更新了问题。我们只使用JSF2。这里的要点是渲染组件的最佳方式是什么?使用JSTL或JSF机制。使用前面提到的JSF机制的影响。使用相同的命令按钮打开弹出窗口并调用操作是惊人的。我想不起来了。再次非常感谢