JSF2:为什么ajax监听器需要周围的<h:form> </h:form>

时间:2012-01-17 09:14:39

标签: ajax forms jsf-2 listener

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

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

<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>

我尝试了很多不同的东西,因为我的听众从未被调用过。最后,我添加了一个周围的<h:form>标记,一切正常。那是为什么?

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

由于

1 个答案:

答案 0 :(得分:2)

  

根据我的理解,只有当我想一次提交多个值时才需要表单。

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

POST比GET具有主要优势,即可以发送的数据量没有限制。在GET中,这取决于所使用的webbrowser,在旧浏览器中为255个字符,直到2~4KB,在较新的浏览器中为8~10KB。在POST中,限制通常约为2GB。