0

チェックボックスの値に従って表示される出力テキストを作成したい。これが私のコードです:

<?xml version='1.0' encoding='UTF-8' ?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:ui="http://java.sun.com/jsf/facelets"
  xmlns:p="http://primefaces.org/ui"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:f="http://java.sun.com/jsf/core">

<body>
    <ui:composition template="../WEB-INF/templates/template.xhtml">
        <ui:define name="content">
            <h:form id="formModifClt">
            <h:outputText value="voulez-vous modifier cette image ?"/>
            <h:selectBooleanCheckbox value="#{clientController.modifierImage}" >
            <f:ajax event="click" listener="#{clientController.onChangeCheckBox()}" render="textPanel" />
            </h:selectBooleanCheckbox>
            <p:outputPanel id="textPanel" autoUpdate="true" >
            <h:outputText value="Oui" rendered="#{clientController.modifierImage}" />
            <h:outputText value="Non" rendered="#{!clientController.modifierImage}" />
            </p:outputPanel>
        <p:outputPanel autoUpdate="true" >
        <h:outputText value="Logo" rendered="#{clientController.modifierImage}" id="logo" />
        <p:fileUpload id="up" fileUploadListener="#{fileUploadController.handleFileUpload}"  
                  mode="advanced" 
                  sizeLimit="100000" 
                  required="true"
                  allowTypes="/(\.|\/)(gif|jpe?g|png)$/" rendered="#{clientController.modifierImage}"/>
        </p:outputPanel>
        <p:commandButton action="#{clientController.modifClient()}" value="Modifier" ajax="false"/>
            </h:form>
        </ui:define>

    </ui:composition>
</body>

私の問題は、ユーザーがチェックボックスを最初にクリックしたときに値が変更されず、onChangeCheckBox()が機能しないことです。2回目からは、正常に動作します。注意:ブールチェックボックスに従って他の処理を行っているため、JavaScriptで実行したくありません。

これが私のコントローラーです:

public void onChangeCheckBox () {
    System.out.println("modifierImage="+modifierImage);
}

 /**
 * @return the modifierImage
 */
public boolean isModifierImage() {
   return modifierImage;
}

/**
 * @param modifierImage the modifierImage to set
 */
public void setModifierImage(boolean modifierImage) {
    this.modifierImage = modifierImage;
}

balusCのソリューションの方が優れていますが(最初にクリックしたときにチェックボタンがチェックされません)、問題は依然として存在します。

4

3 に答える 3

0

現在のページの前に呼び出されたページに依存する場合があることがわかりました。ajax="false" で作成しましたが、正常に動作します!!

于 2013-07-01T07:18:00.560 に答える
0

一見、特定のイベントや再レンダリングするコンポーネントが見えないので、これは 10 のスターターとしてはどうですか?

<h:form>
<h:selectBooleanCheckbox value="#{clientController.modifierImage}" >
                 <f:ajax event="click" listener="#{clientController.onChangeCheckBox()}" render="textPanel" />
            </h:selectBooleanCheckbox>
            <p:outputPanel id="textPanel" autoUpdate="true">
                <h:outputText value="Yes" rendered="#{clientController.modifierImage}" />
                <h:outputText value="No" rendered="#{!clientController.modifierImage}" />
            </p:outputPanel>
</h:form>

さらにヘルプが必要な場合は、コントローラ クラスを投稿してください。

于 2012-12-21T10:45:04.117 に答える
0

私も同じ問題を抱えていました。私<h:form>からすると、初回クリックの更新を妨げたのは要素でした。これがどのように見えるか:

<f:facet name="body">
    <h:form>
      <h:panelGroup id="bodyContainer">
        <h:selectBooleanCheckbox title="#{bundle['some.good.text']}" value="#{bean.checkMe}">
          <f:ajax render="bodyContainer"  />
        </h:selectBooleanCheckbox>
        #{bundle['some.realy.good.text']}  
        <br />
      </h:panelGroup>
    </h:form>
</f:facet>

しかし、<h:form>取り除かれるとすぐに、すべてが正常に戻りました。

于 2014-04-28T08:27:34.530 に答える