selectOneMenu在multipart / form-data中仅调用两次

时间:2014-04-02 06:21:42

标签: jsf file-upload multipartform-data selectonemenu

我有一个JSF复合组件,它包含一个h:形式的根。表单中有许多组件,其中包括selectOneMenu和h:inputFile。当我在窗体上设置enctype =“multipart / form-data”时,仅为两个值更改事件调用selectOneMenu的valuechangelistener。稍后,无论我与菜单交互,都不会调用值更改侦听器。但是,如果我删除enctype =“multipart / form-data”,那么每件事都可以。我必须保持enctype =“multipart / form-data”,因为我有一个文件上传组件。

这是我的Bean:

@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和primefaces 3.5。

请帮帮我。我在这个问题上被困了三天。

由于

1 个答案:

答案 0 :(得分: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>
扩展JSF AJAX的

Primefaces's AJAX component is behavior组件。 它添加和管理新事件(例如valueChange);它还会自动将javascript事件重新附加到DOM元素。

你的情况是jsf的ajax没有将valueChange Listener重新绑定到&#34; transType&#34;当表单是mutipart时selectOneMenu! (这很奇怪,因为行为应该与那些ajax事件相同,天气形式是多部分或www形式编码!