我正在尝试使用一个带有ajax的<h:commandButton>
来检查某些条件,如果可以,则会显示没有ajax的其他<h:commandButton>
。使用ajax的那个工作得很好,但是另一个没有,尽管我已经为另一个页面指定了一个返回String。我无法弄清楚它失败的原因,语法都是正确的。
<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>
答案 0 :(得分:1)
您在第二个rendered
上有<h:commandButton>
个属性。如果在处理表单提交期间评估false
,则不会调用按钮的操作。如果bean是请求作用域,并且在表单提交请求期间没有像显示表单那样保留rendered
属性的相同条件,则会发生这种情况。
有几种方法可以解决这个问题。由于您使用的是JSF 2.0,最好将bean放在 view 范围内。
@ManagedBean
@ViewScoped
public class BookingController {
// ...
}