文件树中的复选框

时间:2019-05-20 18:28:40

标签: java tapestry

所以问题是我遇到了一个运行时错误,该错误涉及文件树内部生成的复选框需要位于表单元素内。问题是,它在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调用生成其字段有关,并且无法检测包裹在外部的表单。我想到的两个可能的解决方法是:

  1. 默认将节点展开,并禁用最小化功能。但是,我却失去了文件树在交互和组织方面的优势之一。
  2. 将表格放入标签内。不过,这会创建很多不必要的额外表格,我不确定如何将其整合到最终创建基于所选标签的电子邮件发送组列表的最终目标中。

这里的任何人都对解决此问题有更好的解决方法,或者有一种方法可以告诉生成的复选框无需重新加载页面即可识别外部格式?

2 个答案:

答案 0 :(得分:1)

最终使用了不同的路线。我遇到的复选框破坏了交易,这是我想不出一种方法来告诉服务器端的布尔值根据客户端的复选框进行更新。

其原因是布尔值是根据需要生成的,而不是页面Java侧的固定集。通过将唯一的ID链接到服务器端的布尔值进行了尝试,但是即使如此,我仍然无法确定将这些ID与客户端的复选框相关联的方法。

因此,我改用了可以使用上下文的事件链接。我只是传入了生成的树节点ID作为上下文,可以在事件链接中搜索该节点并将其添加到服务器上的“选定”列表中。

答案 1 :(得分:0)

JavaDoc for the Tree component所述:

  

树不是表单控制组件...

看看AjaxFormLoop的源代码及其处理AJAX表单更新的方式,我相信您需要根据需要构建自定义组件。