簡體   English   中英

直接從JSF / richfaces訪問基於java的DOM樹

[英]Accessing java-based DOM tree directly from JSF/richfaces

基於這個問題,我還有其他一些問題:

1)這個問題中可用於jsf的地圖實際上是一個數字,所以我現在不確定支持bean方法的返回類型現在應該是什么。 如果我修改它的當前Array<String>返回類型為Array<Map Integer, Map<String, String[]>>> (或ArrayList<Map Integer, Map<String, String[]>>> ?)它只是在jsf端進一步嵌套迭代器的情況? 麻煩是一個Array / ArrayList不是Map,我不確定它在jsf中的表現如何。 這是正確的:

<c:forEach items="#{bean.map}" var="entry">                     <!-- array -->
  <c:forEach items="#{entry.value}" var="nentry">               <!-- map -->
    <h:outputText value="Key: #{nentry.key}, Values:" />        <!-- integer -->
    <c:forEach items="#{nentry.value}" var="nnentry">           <!-- sub map -->
      <h:outputText value="Key: #{nnentry.key}, Values:" />     <!-- string -->
      <c:forEach items="#{nnentry.value}" var="nnnentry">       <!-- string[] -->
        <h:outputText value="#{nnnentry}" />
      </c:forEach><br />
    </c:forEach><br />
  </c:forEach><br />
</c:forEach>

2)我真正存儲在這個地圖中的是從java端解析的XML DOM樹中的xpath rips。 我現在想我可以直接從JSF訪問這個基於java的DOM樹而不必使用XPath - > ArrayOfMaps並返回它。 在看起來像這樣的XML文件中,有比使用上述方法更好的方法嗎?:

 <test>                                              
  <testid>1</testid>                          
  <testname>myName</testname>

  <inst>                                      
   <id>1</id>                  
   <src>C:\my\path</src>               
   <mask>.*\.\w{3}</mask>      
   <mask>.*\.x</mask>          
  </inst>

  <inst>                                      
   <id>2</id>                  
   <src>C:\my\otherpath</src>               
   <mask>.*\.\w{3}</mask>      
   <mask>.*\.x</mask>          
  </inst>
</test>

再次感謝馬克

 <c:forEach items="#{bean.map}" var="entry"> <!-- array --> <c:forEach items="#{entry.value}" var="nentry"> <!-- map --> 

這是錯的。 對於ArrayList每次迭代都不會像您想象的那樣返回Map.Entry對象。 它只返回List的單個元素(在您的情況下是Map )。 這是它應該是這樣的:

<c:forEach items="#{bean.list}" var="map">                        <!-- array -->
  <c:forEach items="#{map}" var="entry">                          <!-- map -->


簡而言之,對ListObject[]進行c:forEach迭代,如下所示

<c:forEach items="${array}" var="item">
    ...
</c:forEach>

最好在原始Java代碼中解釋為

for (Object item : array) {
    // ...
}

c:forEach遍歷所有Map為展示你在以前的題目最好是在原始的Java代碼來解釋:

for (Entry<K, V> entry : map.entrySet()) {
    K key = entry.getKey();       // ${entry.key}
    V value = entry.getValue();   // ${entry.value}
}

本文展示了一種使用JSTL遞歸的方法。 你可以嘗試一下:

<c:forEach var="node" items="${node.children}">
    <c:set var="node" value="${node}" scope="request"/>
    <jsp:include page="node.jsp"/>
</c:forEach>

只是,為了適應您的情況,您可以在循環之前放置以下內容:

<c:set var="node" value="#{backingBean.rootNode}" />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM