我正在尝试使用复选框启用/禁用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>
答案 0 :(得分:1)
必须将bean放在视图范围内才能使其工作。
@ManagedBean
@ViewScoped
public class FormSettings {}
通过ajax启用按钮计为一个HTTP请求。之后使用按钮提交表单将计为另一个HTTP请求。由于您的bean是请求作用域,因此它会在每个HTTP请求上重新创建,并在请求结束时进行操作。由于布尔属性默认为false
,当JSF即将在第二个请求上处理表单提交时,该按钮会再次被有效禁用。