![](/img/trans.png)
[英]Best way to directly manipulate java-based backend objects from flex front-end?
[英]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 -->
简而言之,对List
或Object[]
进行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.