所以问题是我遇到了一个运行时错误,该错误涉及在文件树中生成的复选框必须位于表单元素中。事实是,它位于form元素内部,但是form元素像这样包裹在树上:
<t:Form t:id="form>
<t:Tree t:id="tree" model="model" node="node">
<p:label>
${node.label}
<t:Checkbox value="checkboxNode.selected" />
</p:label>
</t:Tree>
</t:Form>
节点的根级别将生成复选框而不会出现问题。但是,当我选择加号来展开树枝时,它将引发分支复选框错误。如果我刷新页面,并且它记住了哪些分支被扩展,则消失了。如果我要扩展更多,那么它将再次引发错误。如果我最小化一个分支然后再次扩展它,也会发生同样的事情。
我怀疑这与扩展树如何使用AJAX调用生成其字段有关,并且无法检测包裹在外部的表单。我想到的两个可能的解决方法是:
将节点默认为展开状态,并禁用最小化功能。但是,我却失去了文件树在交互和组织方面的优势之一。
在标签内放置一个表格。但是,这会创建许多不必要的额外表单,我不确定如何将其整合到最终目标中,即创建一个组列表以根据所选标签向其发送电子邮件。
这里的任何人都对解决此问题有更好的解决方法,或者有一种方法可以告诉生成的复选框识别外部表单,而无需重新加载页面?
最佳答案
最终使用了不同的路线。我遇到了一个使交易中断的复选框,这个问题是我想不出一种方法来告诉服务器端的布尔值基于客户端的复选框进行更新。
原因是布尔值是根据需要生成的,而不是页面Java侧的固定集。通过将唯一的ID链接到服务器端的布尔值来进行尝试,但是即使如此,我仍无法确定将这些ID与客户端的复选框相关联的方法。
因此,我改用了可以使用上下文的事件链接。我刚刚传入了生成的树节点ID作为上下文,可以在事件链接中搜索该节点并将其添加到服务器上的“选定”列表中。