两个<h:commandButton>在<h:form>中,一个有效,一个无效



我正在尝试使用一个带有ajax的<h:commandButton>来检查一些条件,如果可以,将显示另一个没有ajax的<h:commandButton>。带有ajax的那个工作得很好,但另一个却没有,尽管我已经指定了返回字符串到另一个页面。我不知道为什么它失败了,语法都是正确的。

<h:form>
    <label style="font-weight: bold">Room Code: </label>#{r.code}
    <label style="font-weight: bold">Room Type: </label>#{r.roomType}
    <label style="font-weight: bold">Price Per Day: </label>#{r.pricePerDay}
    <br/>
    <h:commandButton value="Check" action="#{bookingController.checkRoom}">
        <f:param name="selectedRoomID" value="#{r.id}"/>
        <f:ajax execute="@form" render="informer"/>
    </h:commandButton>
    <h:panelGroup id="informer">
        <h:outputText value="#{bookingController.message}" rendered="#{bookingController.checked}"/>
        <h:commandButton value="Book now!" action="#{bookingController.doBook}" rendered="#{bookingController.goodToBook}">
            <f:param name="selectedRoomID" value="#{r.id}"/>
            <f:param name="customerID" value="#{customerLoginController.customerUser.customer.id}"/>
        </h:commandButton>
    </h:panelGroup>
</h:form>

您在第二个<h:commandButton>上有一个rendered属性。如果在处理表单提交期间评估false,则不会调用按钮的操作。如果 Bean 是请求范围的,并且您在表单提交请求期间没有为 rendered 属性保留与显示表单时相同的条件,则会发生这种情况。

有几种方法可以解决这个问题。由于您使用的是 JSF 2.0,因此最好将 Bean 放在视图范围内。

@ManagedBean
@ViewScoped
public class BookingController {
    // ...
}

另请参阅:

    命令
  • 按钮/命令链接/ajax 操作/侦听器方法未调用或输入值未更新

相关内容

  • 没有找到相关文章

最新更新