NB 这个问题是关于纯JSF2的。我知道有第三方框架,如PrimeFaces,提供所需的功能。但我正在寻找纯JSF的解决方案。
在JSF内部<h:form>
我有使用<ui:repeat>
(!)呈现的块列表。每个块都有一个<h:commandLink>
“提交此块”,它应该提交或处理该块的两个值 - 文本和单选按钮。
CommandLink看起来像这样:
<h:commandLink value = "Submit this block">
<f:ajax
listener="#{myFormBean.updateFormBlock(blockModel)}"
event="click"
render="@form"
execute="@form" />
</h:commandLink>
约束:块,放在窗体内(红色矩形),我无法改变它。
问题即可。当我点击“提交此块”时,提交整个表单(块1和块2),我不希望这样。
有没有办法只提交块的字段?
解决方案:
对于应提交的每个组件 - 必须定义唯一的id
属性。 NB!尽管组件位于ui:repeat
块内,但'id'属性值不得包含任何rowIndex! (那是我的错)。 id的纯静态文本(jsf足够聪明 - 它将弄清楚如何查找组件)。应在f:ajax
属性execute
和render
中定义相同的ID值(以空格分隔)(有关详细信息,请参阅linked topic),而不是“@form”。
示例
如果编辑组件(文本“第1部分”)有id =“myEdit”而单选按钮有id =“myRadio” - 则提交按钮可能如下所示:
<h:commandLink value = "Submit this block">
<f:ajax
listener="#{myFormBean.updateFormBlock(blockModel)}"
event="click"
render="@form"
execute="myEdit myRadio" /> </h:commandLink>