【问题标题】:JSF2: Why is a surrounding <h:form> necessary for ajax listenersJSF2:为什么 ajax 侦听器需要环绕 <h:form>
【发布时间】:2012-02-12 02:31:18
【问题描述】:

昨天我试图在 JSF 2 中使用 Ajax 为 SelectManyListbox 实现一个侦听器。

以下代码来自我的记忆,因为我现在没有可用的代码:-)

<h:head>
<title>Test</title>
</h:head>

<h:body>
<h:selectManyListbox value="#{myBean.myList}">
    <f:ajax render="delete" listener="#{myBean.listener}" />
<h:selectManyListbox>
<h:commandbutton id="delete" disabled="#{myBean.disabled}" value="Delete" />
<h:body>

我尝试了很多不同的方法,因为我的监听器从未被调用过。最后,我只是添加了一个环绕的&lt;h:form&gt; 标签,一切正常。这是为什么呢?

我的目标是一个复合控件,它只显示一个列表并在选择/取消选择项目时启用/禁用删除按钮。据我了解,仅当我想一次提交多个值时才需要表单。

谢谢

【问题讨论】:

    标签: ajax forms jsf-2 listener


    【解决方案1】:

    据我了解,仅当我想一次提交多个值时才需要表单。

    因此这是不真实的。当您想通过 UIInput 组件(例如 &lt;h:selectManyListbox&gt;)通过 JSF 向服务器发送 POST 请求时,&lt;h:form&gt; 是必需的。这与 POST 请求是由常规(同步)请求还是由 ajaxical(异步)请求执行的无关。这与输入的数量无关。您不应该忘记javax.faces.ViewState 隐藏输入字段,如果需要,命令按钮本身的名称=值也需要一起发送,因此在JSF 回发请求中基本上没有单个输入值的意思。

    POST 与 GET 相比的主要优势在于可以发送的数据量没有限制。在 GET 中,这取决于使用的网络浏览器,范围从 255 个字符到旧浏览器中的 2~4KB 和新浏览器中的 8~10KB。在 POST 中,限制通常在 2GB 左右。

    【讨论】:

    • 感谢您的澄清。是否有可能解决这个问题?例如,当我构建自己的“列表框”时,它不使用 UIInput-Controls(而不是对用户事件做出反应的标签)。
    猜你喜欢
    • 2013-05-02
    • 2021-12-23
    • 2014-03-13
    • 2021-09-22
    • 2021-12-31
    • 2011-02-25
    • 2012-11-01
    • 1970-01-01
    • 2015-08-21
    相关资源
    最近更新 更多