OGNL %{} 没有 还是别的原因 急 大神来看看

EMMET_C 2012-09-15 10:26:39
我是想根据一个Map 里面定义了表格的列,动态生成表格的列

这是页面上遍历的代码:

<table>
<s:iterator value="#session.map" var="m"> 遍历表格的Map集合,
<s:if test="#m.key ==1">
<thead>
<tr>
<s:iterator value="#m.value.keySet()" var="k"> 这里遍历出来的key 是国际化里面的key,这里生成表格的 thead 表头
<td><s:text name="%{k}"></s:text></td> 这里就可以这样去取国际化
</s:iterator>
</tr>
</thead>
<tbody>
<s:iterator value="#session.products.list" var="p">遍历数据,表格显示的数据
<tr>
<s:iterator value="#m.value.values()" var="v">这里的 V 存的是OGNL表达式
<td><s:property value="%{v}" /></td>这里用%{v} 去取就取不到数据
</s:iterator>
</tr>
</s:iterator>
</tbody>
</s:if>
</s:iterator>
</table>


这是Action 生成的数据:


public String testProduct(){
Map<String,Map<String,String>> ms = new LinkedHashMap<String,Map<String,String>>();
LinkedHashMap<String, String> d= new LinkedHashMap<String, String>();
d.put("product.rartNumber", "#p.id");
d.put("product.datasheet", "#p.datasheet");
d.put("product.description", "#p.description");
d.put("product.vinMin_V", "#p.winMin_v");
d.put("product.vinMax_V", "#p.vinMax_v");
d.put("product.vout_V", "#p.vout_V");
d.put("product.iout_A", "#p.iout_A");
d.put("product.iswLimit_A", "#iswLimit_A");
d.put("product.switchingFreq_kHz", "#p.switchingFreq_kHz");
d.put("product.vfb_V", "#p.vfb_V");
d.put("product.iCCMax_uA", "#p.iCCMax_uA");
d.put("product.extSync", "#p.extSync");
d.put("product.efficience", "#p.efficience");
d.put("product.application", "#p.application");
d.put("product.pack", "#p.pack");
ms.put("1", d);
ActionContext.getContext().getSession().put("map", ms);
Pagination<ProductAll> ps = this.productAllBiz.getAllProductAll(pageIndex,pageSize);
ActionContext.getContext().getSession().put("products", ps);
return SUCCESS;
}



表格:

Part Number Data sheet Description Vin Min(V) Vin Max(V) Vout(V) Iout(A) Isw Limit(A) Switching Freq(kHz)
#p.id #p.datasheet #p.description #p.winMin_v #p.vinMax_v #p.vout_V #p.iout_A #iswLimit_A #p.switchingFreq_kHz
#p.id #p.datasheet #p.description #p.winMin_v #p.vinMax_v #p.vout_V #p.iout_A #iswLimit_A #p.switchingFreq_kHz
#p.id #p.datasheet #p.description #p.winMin_v #p.vinMax_v #p.vout_V #p.iout_A #iswLimit_A #p.switchingFreq_kHz


表头就可以显示 国际化里面的数据,而表格数据就不行,如果我直接写:<s:property value="p.id" /> 那么可以显示数据
为什么 我在下面数据这里不行?加了 %{} 还是当字符串输出了,难道是 我这里的数据是遍历,不能取到还是什么。

...全文
97 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
EMMET_C 2012-09-16
  • 打赏
  • 举报
回复
<s:iterator value="#session.products.list" var="p"> 这里遍历的是表数据
<tr>
<s:iterator value="#m.value.values()" var="v"> 这里遍历出的V是一个OGNL表达式
<td><s:property value="%{v}" /></td>OGNL的表达式是这样的:#p.id 但是这里被当成字符串处理了,为什么会被当成字符串处理呢,就算没有数据也会输出为空白啊。
</s:iterator>
</tr>
</s:iterator>
EMMET_C 2012-09-16
  • 打赏
  • 举报
回复
定义表格的Map 里面的LinkedHashMap<String, String> 前面这个String存的是 国际化里面的Key,后面这个String存的是OGNL 也就是在页面遍历的时候需要用到的表达式,国际化这个就可以,而表数据这个就不可以,如果就算没数据,也不会直接输出 OGNL 这个字符串啊,应该是空白的。
EMMET_C 2012-09-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

<s:property value="%{v}"/>
这里面貌似是用 <s:property value="p.id"/> (在修改界面,一般是这样写)
和 <s:property value="#p.id"/> (在列表界面可以这样写)
两种方式吧
[/Quote]

还是一样的,直接输出了字符串
yimail 2012-09-15
  • 打赏
  • 举报
回复
<s:property value="%{v}"/>
这里面貌似是用 <s:property value="p.id"/> (在修改界面,一般是这样写)
和 <s:property value="#p.id"/> (在列表界面可以这样写)
两种方式吧
EMMET_C 2012-09-15
  • 打赏
  • 举报
回复
大神,显显身啊,急啊

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧