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

Converting null to an empty String in Struts 2

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

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

但每次 cookie 为空时(当用户首次登录时),它都不是空白,而是显示 "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 时,我希望它填写该值。

看来你的代码是基于你的另一个问题。在这段代码中:

<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>

<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 值,否则它将显示输入框为空