由f:ajax启用的commandButton在提交表单时不会调用操作

时间:2012-07-10 08:54:49

标签: ajax jsf

我正在尝试使用复选框启用/禁用commandButton。命令按钮最初被禁用。当用户选中该复选框时,命令按钮将变为启用状态。但是点击按钮时它没有响应。

如果我使命令按钮独立于复选框,它可以正常工作。但是使用复选框,我得到了上面提到的问题。请帮帮我

以下是代码。

的index.xhtml

<h:form>        
  <h:selectBooleanCheckbox value="#{formSettings.licenseAccepted}" id="cb">
    <f:ajax event="click" render="suB cb"/>
  </h:selectBooleanCheckbox>
  <h:outputText value="#{formSettings.msg}"/><br/>

  <h:commandButton id="suB" disabled="false" value="Save" action="loginSuccessfull"/>
</h:form>

FormSettings.java

package classes;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

@ManagedBean
@RequestScoped
public class FormSettings 
{
    private boolean licenseAccepted = false;
    private String msg = "Accept License";

    public FormSettings(){};

    public boolean isLicenseAccepted(){return this.licenseAccepted;};
    public void setLicenseAccepted(boolean licenseAccepted){this.licenseAccepted = licenseAccepted;};
    public String getMsg(){return this.msg;};
    public void setMsg(String msg){this.msg = msg;};
}

faces-config.xml中

<?xml version="1.0" encoding="UTF-8"?>

<faces-config
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
    version="2.0">
    <navigation-rule>
        <from-view-id>/index.xhtml</from-view-id>
        <navigation-case>
            <from-outcome>loginSuccessfull</from-outcome>
            <to-view-id>/login.xhtml</to-view-id>
        </navigation-case>
    </navigation-rule>

</faces-config>

1 个答案:

答案 0 :(得分:1)

必须将bean放在视图范围内才能使其工作。

@ManagedBean
@ViewScoped
public class FormSettings {}

通过ajax启用按钮计为一个HTTP请求。之后使用按钮提交表单将计为另一个HTTP请求。由于您的bean是请求作用域,因此它会在每个HTTP请求上重新创建,并在请求结束时进行操作。由于布尔属性默认为false,当JSF即将在第二个请求上处理表单提交时,该按钮会再次被有效禁用。

另见: