2014-04-28 30 views
0

我很困惑,爲什麼組件p:fileUpload不會調用fileUploadListener,一旦組件由p:ajax顯示。如果我把它放在panelGrid之外,甚至刪除它們,工作得很好。p:fileUpload由p:ajax提供後無法工作

什麼isn't工作:

<div class="pure-control-group"> 
    <label for="mostraNoIndex">Slideshow</label> 
    <p:selectBooleanCheckbox value="#{destaqueCadastrarBean.d.apareceNoSlide}"> 
     <p:ajax event="change" update="upload"></p:ajax> 
    </p:selectBooleanCheckbox> 
</div>          

<h:panelGrid id="upload"> 
    <h:panelGrid rendered="#{destaqueCadastrarBean.d.apareceNoSlide}"> 
     <div class="pure-control-group"> 
      <label for="mostraNoIndex">Imagem</label> 
      <p:fileUpload fileUploadListener="#{destaqueCadastrarBean.handleFileUpload}" mode="advanced" dragDropSupport="true" sizeLimit="100000000000" fileLimit="1" allowTypes="/(\.|\/)(gif|jpe?g|png)$/" />          
     </div> 
    </h:panelGrid> 
</h:panelGrid> 

什麼工作:

<div class="pure-control-group"> 
    <label for="mostraNoIndex">Slideshow</label> 
    <p:selectBooleanCheckbox value="#{destaqueCadastrarBean.d.apareceNoSlide}"> 
    </p:selectBooleanCheckbox> 
</div> 

<div class="pure-control-group"> 
    <label for="mostraNoIndex">Imagem</label> 
    <h:fileUpload fileUploadListener="#{destaqueCadastrarBean.handleFileUpload}" mode="advanced" dragDropSupport="true" sizeLimit="100000000000" fileLimit="1" allowTypes="/(\.|\/)(gif|jpe?g|png)$/" />          
</div> 
+0

我認爲參考'上傳'是不是在這裏。你的表單在哪裏? –

+0

上傳參考是正確的,因爲當按下/點擊p:selectBooleanCheckbox時,panelGrid正確顯示。我只是爲了保持清潔,我應該發佈它嗎?雖然有點大。 –

+0

和''而不是''? –

回答

0

剛剛發現它的解決方案。被調用的豆是RequestScoped,將其更改爲ViewScoped。我猜想導致bean被請求時,表單加載和p:fileUpload只能在創建bean後出現,組件不能到達bean。通過視圖範圍,bean可用於之後的組件。如果有人有更多的技術和明確的解釋,我想更好地理解。