ui:在o:treeNodeItem中重复

时间:2014-11-13 14:53:00

标签: jsf-2 tree omnifaces uirepeat

我有一个<o:tree>我正在显示人员名单和每个人有孩子的东西以及每个孩子有孩子的东西,其中孩子的水平未知 数据显示正确,但显示的节点是<h:commandLink>,其操作是java bean函数

java代码片段:

public class PersonController{
   //class Person having List of children
   //some code
   public void readChild(double childId){
   }
   //some code
}

jsf代码片段:

<o:tree>
   <o:treeNodeItem>
      <ui:repeat var="person" value="#{personController.person}">
         #{person.id}
         <ui:repeat var="child" value="#{person.children}">
            <h:commandLink value="#{child.id}" action="#{personController.readChild(child.id)}"/>
         </ui:repeat>
      </ui:repeat>
   </o:treeNodeItem>
</o:tree>

呈现页面:

--person : 1
----child : 1.1
----child : 1.2
--person : 2
----child : 2.1
----child : 2.2

主要问题是#{personController.readChild(child.id)} id child 1.1被点击参数double childId被发送2.2在任何孩子被点击的情况下,最后一个参数被发送到哪里以防所有值都正确显示

1 个答案:

答案 0 :(得分:0)

我发送一个参数f:param而不是函数发送的参数

通过这种方式,每个节点都可以正确发送id

java代码片段:

public class PersonController{
   //class Person having List of children
   //some code

   //remove parameter double childId
   public void readChild(){
      // getting parameter
      Map<String,String> params = 
                FacesContext.getExternalContext().getRequestParameterMap();
      String id = Double.parseDouble(params.get("id"));
   }
   //some code
}

jsf代码片段:

<o:tree>
   <o:treeNodeItem>
      <ui:repeat var="person" value="#{personController.person}">
         #{person.id}
         <ui:repeat var="child" value="#{person.children}">
            <h:commandLink value="#{child.id}" action="#{personController.readChild()}">
               <f:param name="id" value="#{child.id}"/>
            </h:commandLink>
         </ui:repeat>
      </ui:repeat>
   </o:treeNodeItem>
</o:tree>