Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何基于任意节点数据对象创建具有任意组件的p:treeNode_Java_Jsf_Primefaces - Fatal编程技术网

Java 如何基于任意节点数据对象创建具有任意组件的p:treeNode

Java 如何基于任意节点数据对象创建具有任意组件的p:treeNode,java,jsf,primefaces,Java,Jsf,Primefaces,假设我有一个类DataObj 如何创建包含基于数据属性及其内容的组件的动态p:TreeNode,例如DataObj.values中每个字符串的复选框 下面的示例显示了如何根据TreeNode.data的类型或值更改内容,但是c:if和c:forEach不起作用,我非常确定它们不应该起作用,因为在计算节点时,它们应该为null: <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.su

假设我有一个类DataObj

如何创建包含基于数据属性及其内容的组件的动态p:TreeNode,例如DataObj.values中每个字符串的复选框

下面的示例显示了如何根据TreeNode.data的类型或值更改内容,但是c:if和c:forEach不起作用,我非常确定它们不应该起作用,因为在计算节点时,它们应该为null:

<ui:composition 
  xmlns="http://www.w3.org/1999/xhtml"
  xmlns:ui="http://java.sun.com/jsf/facelets" 
  xmlns:h="http://xmlns.jcp.org/jsf/html"
  xmlns:p="http://primefaces.org/ui"  >
  <h:form id="form">
    <p:tree id="tree" value="#{aCtrl.root}" var="node" >
      <p:treeNode id="treeNode">
        <h:outputText value="#{node.name}"/>
        <p:spinner value="#{node}" rendered="#{node.getClass().getName() eq 'java.lang.Integer'}"/>
        <c:if test="#{node.getClass().getName() eq 'DataObj'}">
          <c:forEach items="#{node.values}" var="value">
            <h:selectBooleanCheckbox value="#{value}"/>
            <h:outputText value="#{value.name}"/>
          </c:forEach>
        </c:if>
      </p:treeNode>
    </p:tree>  
  </h:form>  
</ui:composition>
请考虑这个伪代码…我知道它不运行或编译,但它简化了对我的问题的解释,也可能简化了答案:

是否存在替代的JSF组件库或扩展来解决此问题?

使用ui:repeat是必要的。以前尝试过这一点,但没有注意值必须是列表、数组、java.sql.ResultSet或单个java对象,但不是一组映射键:-在这种情况下需要添加.toArray

...
<p:treeNode id="treeNode" >
  <ui:repeat var="key" value="#{node.type.aValue.keySet().toArray()}">  
    <h:selectBooleanCheckbox id="checkbox" value="#{node.type.aValue.get(key)}"/>
    <h:outputLabel for="checkbox" value="#{key}"/>
  </ui:repeat>  
</p:treeNode>
...
其中node.type.aValue是一个映射

有用的:

<ui:composition 
  xmlns="http://www.w3.org/1999/xhtml"
  xmlns:ui="http://java.sun.com/jsf/facelets" 
  xmlns:h="http://xmlns.jcp.org/jsf/html"
  xmlns:p="http://primefaces.org/ui"  >
  <h:form id="form">
    <p:tree id="tree" value="#{aCtrl.root}" var="node" >
      <p:treeNode id="treeNode">
        <h:outputText value="#{node.name}"/>
        <p:spinner value="#{node}" rendered="#{node.getClass().getName() eq 'java.lang.Integer'}"/>
        <c:if test="#{node.getClass().getName() eq 'DataObj'}">
          <c:forEach items="#{node.values}" var="value">
            <h:selectBooleanCheckbox value="#{value}"/>
            <h:outputText value="#{value.name}"/>
          </c:forEach>
        </c:if>
      </p:treeNode>
    </p:tree>  
  </h:form>  
</ui:composition>
...
<p:treeNode id="treeNode" >
  <ui:repeat var="key" value="#{node.type.aValue.keySet().toArray()}">  
    <h:selectBooleanCheckbox id="checkbox" value="#{node.type.aValue.get(key)}"/>
    <h:outputLabel for="checkbox" value="#{key}"/>
  </ui:repeat>  
</p:treeNode>
...