在Struts 2中将null转换为空字符串

时间:2015-02-03 11:20:03

标签: jsp cookies struts2 jstl ognl

我在struts 2中有一个表单,我会像这样显示一个cookie的值:

 <s:set var="name">${cookie["name"].value}</s:set>
<s:textfield name="name" value="%{#name}"/>

但每次cookie为null(当用户首次登录时),它都不是空白,而是显示“javabrains.model.User@17030961”。我希望这个值在我的表单中是空白的。所以我尝试在Struts2中使用if标记,所以每当名称为null时,它都设置为空白,如下所示:

<s:if test="#name == ''"><s:set var="name" value="''"/></s:if>

现在它可以工作了,我可以看到我的表单在没有cookie的情况下是空白的,但我希望它显示cookie的值,所以我尝试使用else标签来获取cookie值:

 <s:else><s:set var="name">${cookie["name"].value}</s:set> </s:else> 

现在它不起作用,因为当cookie不存在时,它仍然显示“javabrains.model.User@17030961”。

还有其他解决方案更好吗?为了澄清我正在尝试使表单在没有cookie存在时具有空值,并且当存在cookie时,我希望它填写该值。

2 个答案:

答案 0 :(得分:1)

您的代码似乎是基于this answer的另一个问题。在这段代码中:

<s:set var="name">${cookie["name"].value}</s:set>
<s:textfield name="name" value="%{#name}" />

#name<s:set>变量的名称,不是Cookie名称。说清楚:

<s:set var="foobar">${cookie["name"].value}</s:set>
<s:textfield name="name" value="%{#foobar}" />

然后,您尝试检查<s:set>声明外的Cookie值是错误的,因为您正在尝试测试<s:set>变量(甚至在创建它之前)!

您应该使用以下内容检查Cookie值:

<s:if test="#cookie.name!=null">
    <s:set var="name">${cookie["name"].value}</s:set>
</s:if>
<s:else>
    <s:set var="name" value="''"/>
</s:else>

,但由于您只使用CookieProvider拦截器,请尝试直接在JSP EL中使用三元运算符:

<s:set var="name">${not empty cookie["name"] ? cookie["name"].value : ''}</s:set>

答案 1 :(得分:1)

<s:set var="name">${not empty cookie["name"] ? cookie["name"].value : "notfound"}</s:set> <s:if test="#name== 'notfound'"><s:set var="name" value="''"/></s:if> 经过这样的检查,我的表格运行良好,如果没有cookie,它将显示cookie值,否则会将输入框显示为空

相关问题