1

我正在尝试使用复选框启用/禁用命令按钮。命令按钮最初是禁用的。当用户选中复选框时,命令按钮变为启用。但是单击按钮时它没有响应。

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

这是代码。

索引.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>

表单设置.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;};
}

面孔-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>
4

1 回答 1

1

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

@ManagedBean
@ViewScoped
public class FormSettings {}

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

也可以看看:

于 2012-07-10T18:22:56.900 回答