J'ai un composant arborescente qui fonctionne correctement. Cependant, nous aimerions rendre l'application plus conviviale pour les personnes handicapées. L'application doit permettre aux utilisateurs de:Richfaces Navigation dans l'arborescence à l'aide de la touche fléchée (gauche, droite, haut, bas), tabulation et saisie
- Naviguer TreeNodes à l'aide des touches fléchées (haut/bas) et onglet clés
- Déplacement vers un nœud en fait le nœud sélectionné/ciblé
- Alors que sur le noeud sélectionné , la flèche droite pour développer le nœud et l'entrer touche pour afficher le menu contextuel
Voici mon élément d'arbre courant qui fonctionne très bien:
<rich:tree id="fileTree" var="item" selection="#{FILES.selection}" binding="#{FILES.binding}"
rightClickSelection="true" toggleType="ajax" selectionType="ajax" render="fileTree"
oncomplete="set_resource_updated(#{FILES.selected});"
onmousedown="var_allow_select = mouse_right_click(event);" onbeforeselectionchange="return var_allow_select;" >
<rich:treeModelRecursiveAdaptor roots="#{FILES.list}" nodes="#{item.directories}" leaf="#{not item.directory}">
<rich:treeNode expanded="#{item.expanded}" render="fileTree" >
<a href="#" class="treelnk" >
<a4j:outputPanel id="itemP1" >
<h:outputText value="#{item.name}" style="font-weight: #{item eq FILES.selectedNode ? 'bold':'normal'};"/>
<rich:dragSource dragValue="#{item}" type="typeT1" dragIndicator="fileI1"/>
<rich:dropTarget dropValue="#{item}" acceptedTypes="typeT1,typeT2" execute="itemP1,itemP2"
dropListener="#{FILES.dropListener}" immediate="true" render="popupDragDrop" oncomplete="#{rich:component('popupDragDrop')}.show()"/>
</a4j:outputPanel>
<rich:dragIndicator id="fileI1" acceptClass="accept" rejectClass="reject" draggingClass="default">
<h:outputText value="#{item.name}" style="padding-left: 10px"/>
</rich:dragIndicator>
</a>
</rich:treeNode>
<rich:treeModelAdaptor nodes="#{item.files}">
<rich:treeNode expanded="#{item.expanded}" render="fileTree" >
<a href="#" class="treelnk" >
<a4j:outputPanel id="itemP2" styleClass="panel">
<h:outputText value="#{item.name}" style="font-weight: #{item eq FILES.selectedNode ? 'bold':'normal'};"/>
<rich:dragSource dragValue="#{item}" type="typeT2" dragIndicator="fileI2"/>
<rich:dropTarget dropValue="#{item}" acceptedTypes="typeT1,typeT2" execute="itemP1,itemP2"
dropListener="#{FILES.dropListener}" immediate="true" render="popupDragDrop" oncomplete="#{rich:component('popupDragDrop')}.show()"/>
</a4j:outputPanel>
<rich:dragIndicator id="fileI2" acceptClass="accept" rejectClass="reject" draggingClass="default">
<h:outputText value="#{item.name}" style="padding-left: 10px; "/>
</rich:dragIndicator>
</a>
</rich:treeNode>
</rich:treeModelAdaptor>
</rich:treeModelRecursiveAdaptor>
</rich:tree>
J'ai vérifié les solutions here, mais la plupart d'entre elles suggère la manipulation des serveurs et la gestion des événements. Y a-t-il un moyen de le faire totalement du côté des clients?
Bienvenue sur Stack Overflow!Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien pour référence. Les réponses à lien uniquement peuvent devenir invalides si la page liée change. Voir [Comment écrire une bonne réponse] (http://stackoverflow.com/help/how-to-answer). – ByteHamster