2012-12-21 47 views
0

我想根据复选框的值生成一个输出文本;这里是我的代码:h:selectBooleanCheckbox第一次不起作用

<?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()不wroking。从第二次开始,它工作正常。 注意:我不想在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的解决方案是更好的(它没有给出一个chcked checkButton当它被点击了第一次),但问题依然存在!

+0

你可以发布你的clientController吗? – 8bitjunkie

+0

控制器的范围是什么? – 8bitjunkie

回答

0

我发现,有时候,它取决于在当前页面之前调用的页面!我让他们在ajax =“false”,它工作正常!

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> 

如果需要进一步的帮助,请发布您的控制器类。

+0

我发现该事件是点击,而不是onclick,但它仍然不是第一次工作! – ktaria

+2

'onclick'事件不存在。你对HTML元素的'onclick'属性感到困惑,它应该在'click'事件中触发一些JS函数处理程序。真正的事件名称是'click'。 – BalusC

+0

我不知道这是否是回发问题 – 8bitjunkie

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>除去每一件事情又回到了正常。

相关问题