JSF复选框侦听器

JSF复选框侦听器,jsf,Jsf,一个按钮呈现为启用,一个按钮呈现或禁用。您需要通过在ajax调用中调用valueChangeListener来实现这一点,以便启用/禁用按钮 这是复选框和按钮 "panel group rendered=#{}" 这是您的bean#myChangeListener <h:selectBooleanCheckbox id="deactivate" title="select to deactivate" valueChangeListener="#{bean.myChan

一个按钮呈现为启用,一个按钮呈现或禁用。

您需要通过在ajax调用中调用valueChangeListener来实现这一点,以便启用/禁用按钮
这是复选框和按钮

"panel group rendered=#{}" 
这是您的
bean#myChangeListener

       <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}">
public class RenderBean{

    boolean myButton;
    public RendeBean(){

            myButton = true;

    }

    public void enableButton(){

          myButton = true;
    }

    public void disableButton(){

          myButton = false;
    }
}

在我的java类上没有javascript和侦听器方法的情况下,JSF是如何做到这一点的

这显然是不可能的。我推测您实际上是指“没有手动编写的JavaScript”(因此您接受JSF生成的JavaScript,正如所使用的)和“没有手动编写的侦听器方法”(因此您接受JSF自己在组件树状态下的魔力)

在这种情况下,这应该做到:


就这些。不需要额外的JS代码、JSFbean属性或侦听器方法。只是一个
submit()
操作方法

在本例中,
binding
属性将在Facelet范围内的变量名
复选框下放置的引用。EL表达式返回组件的
属性,如果组件已经是
布尔值
,可以在命令组件的
禁用
属性中使用

注意:如果在较旧的Eclipse版本中,
disabled=“#{not checkbox.value}”
行遇到错误的EL错误,然后您需要按如下方式配置它:窗口>首选项>Web>JavaServer Faces工具>验证>类型强制问题>一元操作布尔强制问题将其设置为警告或忽略而不是错误。自从月蚀火星以来,这不再是必要的

另见:

如果没有JavaScript或POST/refresh,你就无法做到。@Alexandre Lavoie好的,那么你有什么建议吗?已经有一些问题了,因为JSF呈现HTML是一样的。@Spring你想要的东西是可能的,但是你也可以使用ajax,但至少你需要一个监听器。谢谢你的赏赐。对未来的一个提示是,如果你尽可能长时间(7天)地开放悬赏,你最终会通过“特色”列表获得用户对你的问题的同情和投票,从而轻松地赢得花掉的声誉我现在在荷兰,正在寻找一个更温暖的地方。我在荷兰的一家公司在家工作。只要找一家允许在家工作的公司;)这是完美的作品,但我有一个按钮CSS的问题,它不“看”禁用时,它被禁用。我给按钮的样式如下class=“greyishBtn submitForm”有什么想法吗?这个问题与最初的问题无关。它适用于我在一个空白的游乐场项目,没有任何额外的CSS。也许您在常规样式表中的某个地方重写了
input[disabled]
public class RenderBean{

    boolean myButton;
    public RendeBean(){

            myButton = true;

    }

    public void enableButton(){

          myButton = true;
    }

    public void disableButton(){

          myButton = false;
    }
}
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();
}