2012-04-21 4 views
3

Tapestry5ツリーコンポーネントでは、複数のアイテムを選択できます。選択した各項目は太字で表示されます。ツリーコンポーネントにはどのように制限を設けて1つのアイテムを選択することができますか?Tapestry5とツリーコンポーネントの選択

私はTreeSelectionModelをこの目的でチェックしていますが、私はTreeNode値をコレクションに格納するだけですが、クライアント側でのユーザー選択を制限することはできません。

ありがとうございました。

答えて

2

これは難しいことです。ツリーコンポーネントをゾーン内に配置し、選択が変更されたときにゾーンを更新する必要があります。

ジェフCallenderはジャンプスタートの例を掲載: http://jumpstart.doublenegative.com.au/jumpstart/examples/ajax/treefromdatabasewithzones

をPsydoコード例:

さ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> 

のJava:

@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 ""; 
    } 
} 
+1

ありがとうございます。私はすでにタペストリージャンプスタートでその例をチェックしています。うまく動作します。 Tapestry 5人は、単純な属性を使用して単一選択/複数選択を許可する必要があります。 – dovahkiin

関連する問題