【问题标题】:commandButton which is enabled by f:ajax does not invoke action when form is submitted提交表单时,由 f:ajax 启用的 commandButton 不会调用操作
【发布时间】:2012-07-10 08:54:49
【问题描述】:

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

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

这里是代码。

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>

【问题讨论】:

标签: ajax jsf


【解决方案1】:

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

@ManagedBean
@ViewScoped
public class FormSettings {}

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

另见:

【讨论】:

  • 非常感谢您的回复!这是我第一次在这个网站上提问,你解释得很好。感谢您的反馈:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-30
  • 1970-01-01
  • 2018-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多