Tapestry5和树组件的选择

时间:2012-04-21 18:24:17

标签: tapestry

在Tapestry5树组件中,用户可以选择多个项目。每个选定的项目都以粗体显示。如何对树组件进行限制,以便选择一个项目?

为此我一直在检查TreeSelectionModel,但我所能做的就是将TreeNode值存储在集合中,但不限制客户端的用户选择。

感谢。

1 个答案:

答案 0 :(得分:2)

这是一个棘手的问题。您必须将树组件放在区域中,并在选择更改时更新区域。

Geoff Callender在jumpstart上发布了一个例子: http://jumpstart.doublenegative.com.au/jumpstart/examples/ajax/treefromdatabasewithzones

Psydo-code示例:

TML:

<t:zone t:id="treeZone" id="treeZone">
  <t:tree t:id="Tree" t:model="treeModel" t:node="treeNode" t:value="categoryNode"  class="prop:leafClass">
    <p:label>
      <t:if test="treeNode.leaf">
        <a t:type="EventLink" t:event="leafSelected" t:context="categoryNode.category.id" t:zone="selectedZone" href="#">
          ${treeNode.label}
        </a>
      </t:if>
      <t:if test="!treeNode.leaf">
        ${treeNode.label}
      </t:if>
     </p:label>
  </t:tree>
</t:zone>

爪哇:

@InjectComponent
private Zone treeZone;

@Inject
private AjaxResponseRenderer ajaxResponseRenderer;

@Inject
private Request request;

void onLeafSelected(Integer categoryId) {
    CategoryNode categoryNode = categoryService.findCategoryInfo(categoryId);
    selectedCategory = categoryNode.getCategory();

    if (request.isXHR()) {
        ajaxResponseRenderer.addRender(treeZone).addRender(selectedZone);
    }
}

public String getLeafClass() {
    if (selectedCategory != null && categoryNode.getCategory().equals(selectedCategory)) {
        return "selected";
    }
    else {
        return "";
    }
}