代码之家  ›  专栏  ›  技术社区  ›  Atul

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

  •  2
  • Atul  · 技术社区  · 6 年前

    使用的技术:

    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,该怎么办。这是在任何时候都只有一个人应该准时到场。

    请给出建议

    1 回复  |  直到 6 年前
        1
  •  3
  •   BalusC    6 年前

    您的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

    推荐文章