【发布时间】:2016-08-12 16:44:47
【问题描述】:
我为用户提供了三个选项:两个设备选择和一个选项说我不想要设备。要选择两个设备,我使用了p:commandLink。说我不想要我用过的设备h:selectOneRadio。
如果用户不想购买设备,用户可以选择选项按钮“我不想拥有”。所以在任何时候,三个按钮中只能选择一个。
如果我按下 h:selectOneRadio 按钮,那么其他两个按钮 (p:commandLink) 将正确更新为“选择”。但是如果我选择了一个设备(p:commandLink),那么h:selectOneRadio按钮不会取消选择,即使它的bean值更新为false。
JSF 页面
<h:panelGroup id="pwpPanel">
<div class="row">
<ui:repeat value="#{reconBean.EQList}" var="equipment">
<div class="col-md-4">
<div class="btn-fibre-tab text-center">
<ui:fragment rendered="#{reconBean.pwpSelectedEquipmentID != equipment.id }">
<p:commandLink id="selectpwp" process="@form" update=":mainForm:pwpPanel"
styleClass="select_button" action="#{reconBean.updatePWPItem(equipment.id)}"
immediate="true">
Select
<f:ajax render=":mainForm:pwpPanel" />
</p:commandLink>
</ui:fragment>
<ui:fragment rendered="#{reconBean.pwpSelectedEquipmentID eq equipment.id }">
<p:commandLink id="selectedpwp" process="@form" update=":mainForm:pwpPanel"
styleClass="selected_button" action="#{reconBean.updatePWPItem(equipment.id)}"
immediate="true">
Selected
<f:ajax render=":mainForm:pwpPanel" />
</p:commandLink>
</ui:fragment>
</div>
</div>
</ui:repeat>
</div>
<div class="row">
<div class="col-sm-12 ">
<h:selectOneRadio value="#{reconBean.notPurchaseWithPurchase}" id="radioDoNotWant"
name="pwpEquipment">
<f:selectItem itemLabel="I do not wish to have" itemValue="true" />
<f:ajax event="click" execute="@this" listener="#{reconBean.resetPWPSelection}"
render="pwpPanel" />
</h:selectOneRadio>
</div>
</div>
</h:panelGroup>
Bean 值
public void updatePWPItem(String itemID) {
pwpSelectedEquipmentID = itemID;
notPurchaseWithPurchase = false;
}
public void resetPWPSelection(AjaxBehaviorEvent event) {
pwpSelectedEquipmentID = null;
}
【问题讨论】:
-
您至少可以 100% 确定地删除
p:commandLinks 中的f:ajax。甚至可能是一个修复。 -
@Kukeltje 不,它也不是那样工作的。
标签: jsf jsf-2 primefaces