<h:selectBooleanCheckbox id="deactivate" title="select to deactivate" />
我的 JSF 页面上有一个复选框和一个按钮。我希望仅在选中复选框时才启用该按钮。
在我的 java 类上没有手动 javascript 和侦听器方法的 JSF 方法是什么。应该有办法做到这一点,也许是这样的表达;
"panel group rendered=#{}"
一个按钮呈现启用和一个按钮呈现或禁用。
<h:selectBooleanCheckbox id="deactivate" title="select to deactivate" />
我的 JSF 页面上有一个复选框和一个按钮。我希望仅在选中复选框时才启用该按钮。
在我的 java 类上没有手动 javascript 和侦听器方法的 JSF 方法是什么。应该有办法做到这一点,也许是这样的表达;
"panel group rendered=#{}"
一个按钮呈现启用和一个按钮呈现或禁用。
在我的 java 类上没有 javascript 和没有侦听器方法的 JSF 方法是什么
这显然是不可能的。我猜您的意思实际上是“没有手动编写的 JavaScript”(因此您接受由 使用的 JSF 生成的 JavaScript <f:ajax>
)和“没有手动编写的侦听器方法”(因此您在组件树状态上接受 JSF 自己的魔法)。
在这种情况下,应该这样做:
<h:form>
<h:selectBooleanCheckbox binding="#{checkbox}">
<f:ajax render="button" />
</h:selectBooleanCheckbox>
<h:commandButton id="button" value="submit"
action="#{bean.submit}"
disabled="#{not checkbox.value}" />
</h:form>
就这样。不需要额外的 JS 代码或 JSF bean 属性或侦听器方法。只是一种submit()
行动方法。
在本例中,该binding
属性会将 Facelet 范围内的UIComponent
引用<h:selectBooleanCheckbox>
放在变量 name 下checkbox
。EL 表达式#{checkbox.value}
返回value
组件的属性,该属性表示如果UISelectBoolean
组件已经 a boolean
,可以在命令组件的disabled
属性中使用。
注意:如果您在disabled="#{not checkbox.value}"
旧 Eclipse 版本的行中遇到不正确的 EL 错误,则需要按如下方式配置它:Window > Preferences > Web > JavaServer Faces Tools > Validation > Type Coercion Problems > Unary operation boolean强制问题将其设置为Warning或Ignore而不是Error。自从 Eclipse Mars 以来,这不再是必要的了。
您需要通过在 ajax 调用上调用 valueChangeListener 来启用/禁用按钮
这里是复选框和按钮
<h:selectBooleanCheckbox id="deactivate" title="select to deactivate"
valueChangeListener="#{bean.myChangeListener}" onchange="submit()">
<h:selectManyCheckbox value="#{user.favNumber1}">
<f:selectItem itemValue="1" itemLabel="Number1 - 1" />
<f:selectItem itemValue="2" itemLabel="Number1 - 2" />
<f:selectItem itemValue="3" itemLabel="Number1 - 3" />
<f:ajax event="change" execute="@this" render="dummyButton"/>
</h:selectManyCheckbox>
<h:commandButton id="dummyButton" value="OK" render="#{renderBean.myButton}">
您需要创建一个只有一个属性的渲染类,其值将在侦听器方法中设置,即bean#myChangeListener
public class RenderBean{
boolean myButton;
public RendeBean(){
myButton = true;
}
public void enableButton(){
myButton = true;
}
public void disableButton(){
myButton = false;
}
}
这是你的bean#myChangeListener
public void myChangeListener(ValueChangeEvent e){
RenderBean rb = (RenderBean) FacesContext.getCurrentInstance()
.getExternalContext().getSessionMap().get("renderBean");
if(e.getNewValue().toString().equals("1"))
rb.enableButton();
else
rb.disableButton();
}