1

チェックボックスを使用して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>
4

1 に答える 1

1

Beanを機能させるには、Beanをビュースコープに配置する必要があります。

@ManagedBean
@ViewScoped
public class FormSettings {}

ajaxでボタンを有効にすると、1つのHTTPリクエストとしてカウントされます。その後、ボタンを使用してフォームを送信すると、別のHTTPリクエストとしてカウントされます。Beanはリクエストスコープであるため、すべてのHTTPリクエストで新たに作成され、リクエストの終わりまでにガベージされます。booleanプロパティのデフォルトはfalse。であるため、JSFが2番目のリクエストでフォーム送信を処理しようとすると、ボタンは再び効果的に無効になります。

参照:

于 2012-07-10T18:22:56.900 に答える