在 Grails GSP 中比较字符串
Comparing Strings in Grails GSP
我被这个问题难住了。如果某个字符串等于登录的用户名,我正在尝试显示 class。但是,它似乎从未评估过为真。
这是 gsp
中的代码
<g:if test="${it.from.username == sec.loggedInUserInfo(field: 'username')}">
<div class="direct-chat-msg right">
</g:if>
<g:else>
<div class="direct-chat-msg">
</g:else>
我也试过用这个方法
<div class="direct-chat-msg ${(it.from.username == sec.loggedInUserInfo(field: 'username')) ? 'right' : ''}">
然而,我无法使 'right' class 出现在 div 中。
为了更好地衡量,我在隐藏字段的 gsp 中打印了两个 classes 的值。
<input type="hidden" value="${it.from.username}"/>
<input type="hidden" value="${sec.loggedInUserInfo(field: 'username')}"/>
而且数值完全一样
<input type="hidden" value="u***@gmail.com">
<input type="hidden" value="u***@gmail.com">
我试过几种字符串比较的组合
.equals()
,两者都调用 .toString()
,还尝试 as String
。但是似乎没有任何效果。
可能是什么问题?
我试过从控制器传递模型中登录的用户对象,只调用 loggedInUser.username
就可以了。所以我现在的问题是,spring security?
返回什么样的对象?
sec.loggedInUserInfo(field: 'username')}
的结果是一个 HTML 编码字符串。 Spring 安全调用 encodeAsHTML()
,然后返回 'username'
值。从视觉上看,它们看起来一样,但它们相等吗?显然不是!
我被这个问题难住了。如果某个字符串等于登录的用户名,我正在尝试显示 class。但是,它似乎从未评估过为真。 这是 gsp
中的代码<g:if test="${it.from.username == sec.loggedInUserInfo(field: 'username')}">
<div class="direct-chat-msg right">
</g:if>
<g:else>
<div class="direct-chat-msg">
</g:else>
我也试过用这个方法
<div class="direct-chat-msg ${(it.from.username == sec.loggedInUserInfo(field: 'username')) ? 'right' : ''}">
然而,我无法使 'right' class 出现在 div 中。 为了更好地衡量,我在隐藏字段的 gsp 中打印了两个 classes 的值。
<input type="hidden" value="${it.from.username}"/>
<input type="hidden" value="${sec.loggedInUserInfo(field: 'username')}"/>
而且数值完全一样
<input type="hidden" value="u***@gmail.com">
<input type="hidden" value="u***@gmail.com">
我试过几种字符串比较的组合
.equals()
,两者都调用 .toString()
,还尝试 as String
。但是似乎没有任何效果。
可能是什么问题?
我试过从控制器传递模型中登录的用户对象,只调用 loggedInUser.username
就可以了。所以我现在的问题是,spring security?
sec.loggedInUserInfo(field: 'username')}
的结果是一个 HTML 编码字符串。 Spring 安全调用 encodeAsHTML()
,然后返回 'username'
值。从视觉上看,它们看起来一样,但它们相等吗?显然不是!