2011-09-27 91 views
2

部分呈現表單字段輸入值I有一個編輯產品形式,其爲預填充來自DB的值。用戶可以更改一個或多個值並將表單發回。一個輸入字段稱爲T:,豆不會更新與t的值inputFileUpload是一個Ajax請求之後僅呈現,如果用戶選擇來改變產物通過保存按鈕image.During編輯形式的最終回發:inputFileUpload字段形式.The相關部分低於:JSF 2.0,不更新在bean

<h:form>  
       <tr> 
        <td>Product Image*:</td> 
        <td> 
         <h:graphicImage url="#{addItem.prodFileName}" width="100" height="100"/> 
         <br /><h:commandLink value="change image" > 
          <f:ajax render="uploadimage" execute="@this" listener="#{addItem.ChangeImage}"/> 
         </h:commandLink> 
        </td> 
       </tr> 

       <tr > 
        <td> 
         <h:panelGroup id="uploadimage"> 
          <t:inputFileUpload rendered="#{addItem.editImgChange}" label="editImage" value="#{addItem.uploadedFile}" /> 
           <h:messages for="prodimage"/> 
          <h:inputHidden id="hiddeneditimgchange" value="#{addItem.editImgChange}" /> 
         </h:panelGroup> 
        </td> 
       </tr> 
     <h:commandButton value="save" action="#{addItem.EditItem}" /> 
</h:form> 

如addItem bean是請求範圍及其代碼的相關部分是:

@ManagedBean 
    public class AddItem extends AbstractBean{ 
     boolean editImgChange; 
     private UploadedFile uploadedFile; 

     //.. 
     //getters and setters 

     public void ChangeImage(){ 
       this.editImgChange=true; 
      } 

     public String EditItem() { 
      //some logic 
     } 
    } 

我看過他們的一些回答幾個類似的問題我試圖製作bean ViewScoped,但它破壞了我預先填充表單值的初始邏輯。由於我對RequestScoped感到滿意,如果它的關閉正在影響t:inputFileUpload的更新,我已經保存了editImgChange標誌的狀態。當我查看bean的屬性都很好時,該標誌是true,但uploadedFile屬性爲null。

+0

您具體是如何保存'editImgChange'標誌的狀態? – BalusC

+0

使用上面窗體中panelGroup內部的inputhidden標籤。 – maya

+0

這個價值究竟又是如何約束?通過「綁定」或「值」? – BalusC

回答

2

按照意見中,您使用<h:inputHidden value="#{addItem.editImgChange}" />保存狀態。這是行不通的。 rendered屬性在應用請求值階段期間被評估,而該隱藏值在更新模型值階段期間可用,因此太遲了。

既然你已經使用戰斧,使用<t:saveState value="#{addItem.editImgChange}" />代替。或者,解決在製作bean視圖時遇到的問題。我不認爲這會是一個問題。也許你正在使用@PostConstruct並期望它在每個請求中被調用。您應該使用<f:event type="preRenderView">來代替。

+0

t:saveState幫助。謝謝。關於視圖範圍,我會弄清楚發生了什麼問題。我沒有使用@PostConstruct。 – maya

+0

不客氣。 – BalusC