Dan*_*Dan 6 java jsp struts2 ognl struts-tags
我试图比较两个值:一个来自session,另一个来自iterator
<s:iterator value="themes" status="currentRecord">
<s:if test="%{usertheme}) == %{themeName}">
<td align="center" bgcolor="red">
</s:if>
<s:else>
<td align="center" bgcolor="green">
</s:else>
</s:iterator>
Run Code Online (Sandbox Code Playgroud)
但我无法比较我的价值观,请你告诉我我在哪里犯错误?
%{} 应该(如有必要)围绕所有陈述,而不是在中间.
对于字符串,你应该使用.equals,.equalsIgnoreCase,.contains,.indexOf等...不是==.
改为:
<s:iterator value="themes" status="currentRecord">
<s:if test="%{#session.usertheme.equalsIgnoreCase(themeName)}">
<td align="center" bgcolor="red">
</s:if>
<s:else>
<td align="center" bgcolor="yellow">
</s:else>
....
Run Code Online (Sandbox Code Playgroud)
这也有效:
<s:if test="#session.usertheme.equalsIgnoreCase(themeName)">
Run Code Online (Sandbox Code Playgroud)
(不是答案,而是两个建议,我需要格式化; Andrea的回答是正确的.)
为了您自己和随后的理智,将JSP的大块变成一行:
<s:iterator value="themes">
<tr>
<s:set var="currTheme" value="%{userTheme == themeName ? 'red' : 'green'}"/>
<td bgcolor="${currTheme}">Cell content</td>
</tr>
</s:iterator>
Run Code Online (Sandbox Code Playgroud)
考虑使用主题命名的CSS而不是内联CSS,并完全避免它,大致:
td.theme1 {
background-color: red;
}
td.theme2 {
background-color: green;
}
td.theme3 {
background-color: #daa520;
}
Run Code Online (Sandbox Code Playgroud)
(假设主题名为"theme1","theme2","theme3",但这不相关.)
<table class="themed-table">
<s:iterator value="themes">
<tr>
<td class="${themeName}">Cell content</td>
</tr>
</s:iterator>
</table>
Run Code Online (Sandbox Code Playgroud)
将样式信息"提升"到一个级别会更好,例如table.theme1 td,但是你明白了.这样做可以在主题信息的来源等方面提供很大的灵活性.