gpt4 book ai didi

jsp - Struts2 Tiles 将 var 设置为 tiles 属性作为字符串

转载 作者:行者123 更新时间:2023-12-05 01:15:19 27 4
gpt4 key购买 nike

我使用 struts 2.3.16 和 tiles 2.0.6。

具有空属性(以及其他属性)的图 block 定义:

<put-attribute name="pageSidePanel" value="" />

一些其他定义扩展了它,他们可以选择填入值:

<put-attribute name="pageSidePanel" value="/panels/greenPanel.jsp" />

或者也留空。

我试图通过使用 struts“set”标签和一些基本的 if/else 逻辑来测试这个属性是否为空。例如:

<s:set var="sidePanelName"><tiles:getAsString name='pageSidePanel'/></s:set>
<s:if test='%{#sidePanelName.isEmpty()}'>TRUE</s:if><s:else>FALSE</s:else>

结果不是我所期望的。我执行了 11 项逻辑测试,有两种变体:11 项测试使用了主题标签,另外 11 项没有:

#sidePanelName vs sidePanelName

我用 2 个不同的 JSP 页面进行了测试,一个实际上在磁贴中放置了一个值,另一个没有。所以总共有 44 个逻辑测试:

  1. 在 tiles 属性为空的页面上使用 # 进行 11 次测试
  2. 11 次测试不在 tiles 属性为空的页面上使用 #
  3. 在 tiles 属性填充了一个值的页面上使用 # 进行了 11 次测试
  4. 在 tiles 属性填充了值的页面上不使用 # 进行了 11 次测试

只有情况 3 是正确的。所有其他情况都给出了错误的结果。例如,在情况 1 中,如果我测试 #var == null 我得到 false,但是如果我测试 var == null(没有标签)i 为真。所以我需要澄清两件事:

  1. 用不用#有什么影响?
  2. tiles 属性是否有值有什么影响,struts var 将其视为 null 还是空字符串,还是取决于我是否使用了 #?

作为引用,这里是所有的测试:

<s:set var="sidePanelName"><tiles:getAsString name='pageSidePanel'/></s:set>

<s:if test='#sidePanelName != ""'>TRUE</s:if><s:else>FALSE</s:else>
<s:if test="#sidePanelName != ''">TRUE</s:if><s:else>FALSE</s:else>
<s:if test='#sidePanelName == ""'>TRUE</s:if><s:else>FALSE</s:else>
<s:if test="#sidePanelName == ''">TRUE</s:if><s:else>FALSE</s:else>
<s:if test='%{!#sidePanelName.isEmpty()}'>TRUE</s:if><s:else>FALSE</s:else>
<s:if test='%{#sidePanelName.length() > 0}'>TRUE</s:if><s:else>FALSE</s:else>
<s:if test='%{#sidePanelName.length() == 0}'>TRUE</s:if><s:else>FALSE</s:else>
<s:if test='%{#sidePanelName.equals("")}'>TRUE</s:if><s:else>FALSE</s:else>
<s:if test='%{#sidePanelName.equalsIgnoreCase("")}'>TRUE</s:if><s:else>FALSE</s:else>
<s:if test='#sidePanelName == null'>TRUE</s:if><s:else>FALSE</s:else>
<s:if test='#sidePanelName != null'>TRUE</s:if><s:else>FALSE</s:else>

<s:if test='sidePanelName != ""'>TRUE</s:if><s:else>FALSE</s:else>
<s:if test="sidePanelName != ''">TRUE</s:if><s:else>FALSE</s:else>
<s:if test='sidePanelName == ""'>TRUE</s:if><s:else>FALSE</s:else>
<s:if test="sidePanelName == ''">TRUE</s:if><s:else>FALSE</s:else>
<s:if test='%{!sidePanelName.isEmpty()}'>TRUE</s:if><s:else>FALSE</s:else>
<s:if test='%{sidePanelName.length() > 0}'>TRUE</s:if><s:else>FALSE</s:else>
<s:if test='%{sidePanelName.length() == 0}'>TRUE</s:if><s:else>FALSE</s:else>
<s:if test='%{sidePanelName.equals("")}'>TRUE</s:if><s:else>FALSE</s:else>
<s:if test='%{sidePanelName.equalsIgnoreCase("")}'>TRUE</s:if><s:else>FALSE</s:else>
<s:if test='sidePanelName == null'>TRUE</s:if><s:else>FALSE</s:else>
<s:if test='sidePanelName != null'>TRUE</s:if><s:else>FALSE</s:else>

最佳答案

<tiles:getAsString>如果您没有在 tiles 定义中定义它的值,标签将返回空字符串。所以你的代码

<s:set var="sidePanelName"><tiles:getAsString name='pageSidePanel'/></s:set>

将与一个空的 <s:set> 相同标签。

<s:set var="sidePanelName"></s:set>

还有一个空的 <s:set>标签不带 value属性将分配 top到一个变量(在大多数情况下,它将是当前的操作实例)。

尝试用 <s:property value="#sidePanelName"/> 打印它的值.您可能会看到类似 your_package.YourClass@hash 的内容.

关于jsp - Struts2 Tiles 将 var 设置为 tiles 属性作为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25551470/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com