【问题标题】:Struts 2.0 - dynamically append the s:property valueStruts 2.0 - 动态附加 s:property 值
【发布时间】:2013-05-29 14:15:30
【问题描述】:

我在动作类中有一些相同类型的对象..

例如:

LivingThings fish = new LivingThings("FISH");    
LivingThings dog = new LivingThings("DOG");    
LivingThings lion = new LivingThings("LION");

每个对象的内容会有所不同。

同样在同一个动作类中,我有一个值作为对象名称的列表 即

ArrayList<String> animalsList = new ArrayList<String>();    
animalsList.add("fish");
animalsList.add("dog");
animalsList.add("lion");

=====

现在在 jsp 页面中,我需要使用 animalsList 内容动态获取对象内容。即

<s:iterator value="animalsList" id="eachAnimal">
    <s:property value="#eachAnimal.lifespan" />
</s:iterator>

这里我要做的就是,而不是直接给出类似的代码

<s:property value="fish.lifespan" />
<s:property value="dog.lifespan" />
<s:property value="lion.lifespan" />

不知何故,我需要从animalsList 列表中附加对象名称。在struts 2.0中可以吗?我对 OGNL 概念有点困惑。 我尝试了这些场景:

<s:iterator value="animalsList" id="eachAnimal">
    <s:property value="#eachAnimal.lifespan" />
    <s:property value="%{eachAnimal}.lifespan" />
    <s:property value="%{#eachAnimal}.lifespan" />
</s:iterator>

有人可以给我建议吗?

【问题讨论】:

  • 使用 2.0,IIRC %{#eachAnimal.lifespan} 应该可以工作;你是说没有吗?不过,我建议不要使用这么旧版本的 S2。
  • 为什么不能在列表中存储LivingThings 而不是字符串?无论如何,您可以像在这个问题中一样使用 OGNL 评估:stackoverflow.com/q/16712395/1700321
  • @DaveNewton 是的,它不工作.. 我正在使用最新的 jar 文件.. 我正在使用 struts2-core-2.3.14.jar....
  • @AleksandrM 我可以将 LivingThings 用作列表,但我的情况是这样......这就是为什么......但是当我尝试使用 它的工作

标签: java jsp struts2 ognl


【解决方案1】:

也许这不是处理这种情况的最佳方式,但您要求的可以这样做:

<s:iterator value="animalsList" id="eachAnimal">
  <s:property value="#attr[#eachAnimal].lifespan" />
</s:iterator>

【讨论】:

  • 非常感谢 Aleksandr,它现在可以工作了... :-),但是你为什么提到,它不是最好的方法.. 任何缺点或性能问题.. 任何东西..
  • @abyin007:这可能不是最好的方法,因为我不知道你想要达到什么目的。顺便说一句,接受/支持对您有帮助的答案。
猜你喜欢
  • 2010-12-06
  • 1970-01-01
  • 2012-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多