2014-04-02 11 views
0

我有一個JSF複合組件,它包含一個h:表單作爲根。表單有許多組件,其中包括selectOneMenu和一個h:inputFile。當我在表單上設置enctype =「multipart/form-data」時,selectOneMenu的valuechangelistener僅用於兩個值更改事件。後來,不過,我與菜單交互,值更改偵聽器根本不被調用。但是,如果我刪除enctype =「multipart/form-data」,那麼每件事情都可以正常工作。我必須保持enctype =「multipart/form-data」,因爲我有一個文件上傳組件。selectOneMenu只在多部分/表單數據中調用兩次

這裏是我的豆:

@Model 
@ViewScoped 
public class TransactionBean implements Serializable { 
    private Part inReceiptFilePart; 
    /*setter and getter*/ 


    private TransactionType transactionType; 
    /*setter and getter*/  

     private final TransactionType transTypeList[] = { 
    TransactionType.COMPLETE,TransactionType.TECHNICAL,TransactionType.SUBMUNICIPALITY_TECHNICAL, TransactionType.COMPLAINT,  TransactionType.FOLLOWUP_COUNCIL,    TransactionType.FOLLOWUP_MANAGEMENT 
}; 
    public TransactionType[] getTransTypeList() { 
    return transTypeList; 
} 

    public void transactionTypeChanged(ValueChangeEvent event) { 
    ... /// some code 
} 
} 

這裏是JSF複合材料部件:

<h:form id="entryForm" enctype="multipart/form-data"> 
    <p:selectOneMenu id="transType" value="#{transactionBean.transactionType}" style="direction: ltr" valueChangeListener="#{transactionBean.transactionTypeChanged}"> 
         <f:ajax execute="transType" render="@form" > </f:ajax>        
         <f:selectItems value="#{transactionBean.transTypeList}" var="tt" itemLabel="#{tt.arName}"> 

         </f:selectItems>        
        </p:selectOneMenu> 
     <h:inputFile value="#{transactionBean.inReceiptFilePart}" > </h:inputFile> 
     <p:commandButton id="insertTrans" value="أدخل المعاملة" action="#{transactionBean.insertTransaction}" ajax="false"> 
     </p:commandButton>  
</h:form> 

環境是JSF 2.2,Glassfish的4.0和3.5 primefaces。

請幫幫我。我被困在這個問題上三天了。

謝謝

回答

0

這是很奇怪的行爲!

嘗試將valueChangeListener事件更改爲AJAX調用。

<p:selectOneMenu id="transType" value="#{transactionBean.transactionType}" style="direction: ltr" > 
     <p:ajax event="change" partialSubmit="true" update="@form" listener="#{transactionBean.transactionTypeChanged}"/>    

     <f:selectItems value="#{transactionBean.transTypeList}" var="tt" itemLabel="#{tt.arName}" />       
</p:selectOneMenu> 

Primefaces's AJAX component is behavior擴展JSF AJAX的組件。 它增加和管理新事件(例如valueChange);它也會自動將JavaScript事件重新附加到DOM元素。

您的情況是,當表單爲多部分時,jsf的ajax不會將valueChange監聽器重新綁定爲「transType」selectOneMenu! (這很奇怪,因爲行爲應該與那些Ajax事件相同,天氣形式是多部分或www形式編碼!

+0

謝謝devBinnooh。它解決了這個問題。任何解釋爲什麼使用p:ajax而不是f :ajax解決了這個問題!!!! –

+0

我很高興現在的作品:)我給p添加了解釋:ajax – devBinnooh

相關問題