【问题标题】:selectOneMenu invoked ONLY twice in a multipart/form-dataselectOneMenu 在 multipart/form-data 中仅调用了两次
【发布时间】:2014-05-13 05:47:19
【问题描述】:

我有一个 JSF 复合组件,其中包含一个作为根的 h:form。该表单有许多组件,其中包括 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。

请帮助我。我在这个问题上卡了三天。

谢谢

【问题讨论】:

    标签: jsf file-upload multipartform-data selectonemenu


    【解决方案1】:

    这是非常奇怪的行为!

    尝试将 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-form-encoded!

    【讨论】:

    • 感谢 devBinnooh。它解决了这个问题。任何解释为什么使用 p:ajax 而不是 f:ajax 解决了问题!!!
    猜你喜欢
    • 2015-12-23
    • 2023-02-02
    • 2020-07-14
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    • 2018-12-07
    相关资源
    最近更新 更多