【问题标题】:Parameters from f:param not submitted with AJAX request when form enctype is multipart/form-data当表单 enctype 为 multipart/form-data 时,来自 f:param 的参数未随 AJAX 请求一起提交
【发布时间】:2015-06-23 11:10:35
【问题描述】:

我正在运行 Wildfly 8.2,并且正在使用与其捆绑的 JSF 版本 2.2.8-jbossorg-1。

我有以下 facelet:

<h:form enctype="multipart/form-data">
    <h:commandButton value="Submit">
        <f:param name="myparam" value="true"/>
        <f:ajax execute="@this" render="@this"/>
    </h:commandButton>
</h:form>

当我按下提交按钮时,提交了几个参数,但没有提交 myparam。如果我从表单中删除 enctype="multipart/form-data" , myparam=true 提交就好了。

无论有没有 enctype="multipart/form-data",如果我删除 f:ajax,myparam=true 总是会提交。

为什么它在没有 enctype="multipart/form-data" 的情况下工作,但不能工作?我怎样才能让它工作?

【问题讨论】:

  • 似乎在 2.2.11 中工作。

标签: ajax jsf jsf-2 jsf-2.2 wildfly


【解决方案1】:

这是 Mojarra 中的一个错误。我刚刚将其报告为issue 3968

目前,一种解决方法是将它们作为 EL 方法参数传递。

<h:form enctype="multipart/form-data">
    <h:commandButton value="Submit" action="#{bean.action(true)}">
        <f:ajax execute="@this" render="@this"/>
    </h:commandButton>
</h:form>
public void action(boolean myparam) {
    // ...
}

【讨论】:

  • 很高兴知道这是一个错误并感谢您报告它。我只是希望它有更好的解决方法。当参数值是动态的时,方法参数不能很好地工作。我可能必须使用 2.2.1,这似乎是此功能可用的最后一个版本。
  • 我看不出它对“动态”值的影响如何。可能只是时间/范围错误,因为它们是在回发请求的应用请求值阶段而不是初始请求的呈现响应阶段评估的。如果持有“动态”值的 bean 是请求范围内的,这确实可能表现不同。
  • 这绝对是我遇到过很多次的问题。但即便如此,问题并不仅限于在 h:commandButton 中使用 f:param。我在 issue 3968 上发布了一些实际上导致我出现问题的代码。它来自我称为 languageTabs 的自定义组件,它有点像 dataTable,但它不是呈现列表,而是呈现选择的语言。它还呈现多个命令按钮以允许添加和删除语言。它支持 ajax,并且可以使用多语言表单。 See it here
猜你喜欢
  • 2011-08-05
  • 1970-01-01
  • 2016-04-02
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 2013-10-21
相关资源
最近更新 更多