2012-01-17 22 views
1

昨天我是想实现在JSF 2JSF2:为什么周围的AJAX听众必要<h:form>

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

我尝试了很多不同的东西,因为我的听众从来没有被叫过。最后,我刚刚添加了一个周围的<h:form>标签,一切正常。这是为什么?

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

感谢

回答

2

在我的理解时,我想一次提交多个值,只需要一个形式。

因此这是不真实的。当您想通过UIInput组件(如<h:selectManyListbox>)向JSF发送POST请求时,需要使用<h:form>。这与POST请求是由常规(同步)请求还是由Ajax(异步)请求执行无关。这与输入量无关。您不应该忘记,隐藏的输入字段以及命令按钮本身的名称=值也需要同时发送,因此在JSF回发请求中基本上不会有单个输入值的方式。

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

+0

感谢您的澄清。 它会以某种方式解决此问题吗?例如,当我构建我自己的“列表框”时,它不使用UIInput-Controls(而是对用户事件作出反应的标签)。 – lostiniceland 2012-01-17 11:34:46