所以问题是我收到了一个运行时错误,涉及文件树内生成的复选框需要位于表单元素内。事实是,它位于表单元素内部,但表单元素包裹在树周围,如下所示:
<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>
节点的根级别生成复选框没有问题。但是,当我选择加号来伸展树(Splay Tree)枝时,它会引发分支复选框的错误。如果我刷新页面并且它记住展开了哪些分支,这种情况就会消失。如果我去扩展更多,那么它会再次抛出错误。如果我最小化一个分支然后再次展开它,也会发生同样的事情。
我怀疑这与使用 AJAX 调用扩展树生成其字段的方式有关,并且它无法检测包装在外部的表单。我想到的两种可能的解决方法是:
- 默认节点为展开状态并禁用最小化功能。尽管如此,我还是失去了文件树的交互和组织优势之一。
- 在标签内放置一个表单。不过,这会创建很多不必要的额外表单,而且我不太确定如何将其合并到创建组列表以根据所选标签发送电子邮件的最终目标。
这里有人对解决此问题的更好方法有任何见解,或者可能有一种方法可以告诉生成的复选框识别外部表单而不需要重新加载页面?
最佳答案
最终使用了不同的路线。我遇到的复选框问题是一个破坏交易的问题,因为我想不出一种方法来告诉服务器端的 boolean 值根据客户端的复选框进行更新。
原因是 boolean 值是根据需要生成的,而不是页面 Java 端的固定集。尝试通过将唯一 ID 链接到服务器端的 boolean 值来解决此问题,但即便如此,我也无法确定将这些 ID 关联到客户端复选框的方法。
所以我选择了事件链接,它可以获取上下文。我只是将生成的树节点 ID 作为上下文传递,它可以在事件链接中搜索节点并将其添加到服务器上的“选定”列表中。
关于java - 文件树内的复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56226331/