前言:我是SO的忠实粉丝,几乎每天都在这里读东西——但这是我的第一个问题——感谢每一个创造了如此奇妙资源的人!
环境:Spring/JSTL/Java;这个项目的约束使我无法接受需要放弃Spring/Java的解决方案,尽管我可能可以实现任何标准视图来代替JSTL。
怎样
问题:我有一个数据服务,从中获取一组集合。我不能控制这个服务,也不能定义它——这是由其他人负责的,它可以随时更改。集合中的每个项都可以是另一个集合(我必须对其进行分析),因此理论上整个集合是无限的。收藏基本上是这样的:
基本上每个
项目
是我的客户向他们的客户提供的“服务”,例如:“配置您的机构电子邮件”,以及
收集
是相关服务的“类别”,例如:“提供电子邮件服务”。但“提供的电子邮件服务”的类别实际上可能是更一般的更大项目/对象/集合的项目/对象/集合,例如:“提供的通信服务”。
<ul>
<c:forEach items="${serviceCategories} var="category"> // iterate through each collection
<li>${category.key} //the user-displayable title of the 'category' ('collection')
<ul>
<c:forEach items="${category.value}" var="service"> // iterate through each item
<li>${service.key}</li> //the user-displayable title of the 'service' ('item')
</c:if>
</ul>
</li>
</c:if>
</ul>
所以我想我的问题是,给定这样一个数据结构,我如何在一个可以管理它的视图中表示它???我受客户希望将此结构表示为树状结构的约束。
如果我可以使用纯java操作视图,那么我希望实现这一点的一种方法是使用递归。。。我想是这样的:
/** NOTE: I am not suggesting this is a great example of recursion, nor that it even
* would result in correct output; it was one-off'd just to provide something of an
* example of how I imagine this could be done in Java if I had to do it this way.
*/
private StringBuilder buildString( Map<String, Object> dataStruct ) {
StringBuilder view = new StringBuilder();
Set<String> keys = dataStruct.getKeys();
for( String key : keys ) {
Object value = dataStruct.get( key );
if( value instanceof String ) {
view = key + "[" + value + "]";
return;
}
String subView = buildString( value );
view = key + "[" + subView + "]";
}
我也希望我只是忽略(或不知道)一个更优雅的解决方案,很容易被人承认谁可以帮助我。
谢谢你抽出时间!
:天