我有一個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。
請幫幫我。我被困在這個問題上三天了。
謝謝
謝謝devBinnooh。它解決了這個問題。任何解釋爲什麼使用p:ajax而不是f :ajax解決了這個問題!!!! –
我很高興現在的作品:)我給p添加了解釋:ajax – devBinnooh