Jsp Struts2 Tiles将变量设置为Tiles属性的字符串
我使用struts 2.3.16和tiles 2.0.6 具有空属性的平铺定义(除其他外): 我使用两个不同的JSP页面进行了测试,一个页面实际在tiles中输入了值,另一个页面没有。因此,总共有44个逻辑测试:Jsp Struts2 Tiles将变量设置为Tiles属性的字符串,jsp,struts2,tiles2,Jsp,Struts2,Tiles2,我使用struts 2.3.16和tiles 2.0.6 具有空属性的平铺定义(除其他外): 我使用两个不同的JSP页面进行了测试,一个页面实际在tiles中输入了值,另一个页面没有。因此,总共有44个逻辑测试: 11在tiles属性为空的页面上使用#进行测试 11在tiles属性为空的页面上不使用#的测试 11在tiles属性填充值的页面上使用#进行测试 11在tiles属性填充值的页面上不使用#的测试 只有情况3是正确的。所有其他情况都给出了错误的结果。例如,在情况1中,如果我测试#var=
#var==null
我得到false,但是如果我测试var==null
(不带hashtag)I
得到true。所以有两件事我需要澄清:
<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>
真假
真假
真假
真假
真假
真假
真假
真假
真假
真假
真假
真假
真假
真假
真假
真假
真假
真假
真假
真假
真假
真假
您不能在null
对象上调用方法
然后
和isEmpty()
是不可调用的,因为调用对象本身时length()
- 对于与
和equals()
的比较,如果在已知对象上调用,则可以调用它们而不生成NPE,如equalsIgnoreCase()
“”。equalsIgnoreCase(#sidePanelName)
“”。equalsIgnoreCase(#sidePanelName)
将给出false,因为它不等于空字符串,它只是null
注意你的描述,这是误导性的: 我有一个不是string类型的tiles属性 [……] 只要字符串不为空/已填充/至少有一个字符- 如果尚未在平铺定义中定义其值,
标记将返回空字符串。所以你的代码
<s:set var="sidePanelName"><tiles:getAsString name='pageSidePanel'/></s:set>
将与空的
标记相同
<s:set var="sidePanelName"></s:set>
一个空的
标记w/ovalue
属性将top
分配给一个变量(在大多数情况下,它将是当前操作实例)
尝试使用
打印其值。您可能会看到类似于your\u包的内容。YourClass@hash
我澄清了问题并添加了更多细节/结果。你能用这些新信息澄清你的答案吗?特别是一个问题:如果tiles属性为空,struts变量是否为null?请阅读,尤其是其中链接的答案,以避免22次测试:)谢谢,这对我来说是必要的文献
如果找不到命名值,则抛出一个JSPException
。我的意思是在这种情况下它不会返回空字符串。@RomanC:是的,如果根本没有定义。但是OP说有定义但值为空。@RomanC:有ignore
属性可以用来忽略异常。没错,set
标记被计算为top
。但就我而言,这不是一种行动。好的,+1表示回答很好。您应该使用s:property
标记来输出tiles:getAsString
的值。
#sidePanelName vs sidePanelName
<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>
<s:set var="sidePanelName"><tiles:getAsString name='pageSidePanel'/></s:set>
<s:set var="sidePanelName"></s:set>