java - test - struts if boolean
¿Cómo comparar dos cadenas usando etiquetas Struts2 y OGNL? (3)
%{}
debe colocarse (si es necesario) alrededor de todo el enunciado, no en el medio.
Para cadenas, debe usar .equals
, .equalsIgnoreCase
, .contains
, .indexOf
, etc. No ==
.
Cambiar a esto:
<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>
....
esto también funciona:
<s:if test="#session.usertheme.equalsIgnoreCase(themeName)">
Estoy tratando de comparar dos valores: uno de sesión y otro de iterador
<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>
Pero no puedo comparar mis valores. ¿Puede decirme dónde estoy cometiendo errores?
(No una respuesta, sino dos sugerencias, y necesitaba formatear; la respuesta de Andrea es correcta).
Por su cordura y la de los que siguen, convierta ese trozo de JSP en una sola línea:
<s:iterator value="themes">
<tr>
<s:set var="currTheme" value="%{userTheme == themeName ? ''red'' : ''green''}"/>
<td bgcolor="${currTheme}">Cell content</td>
</tr>
</s:iterator>
Considere usar CSS con nombre de tema en lugar de CSS en línea y evitarlo por completo, más o menos:
td.theme1 {
background-color: red;
}
td.theme2 {
background-color: green;
}
td.theme3 {
background-color: #daa520;
}
(Asumiendo temas llamados "theme1", "theme2", "theme3", pero eso no es relevante).
<table class="themed-table">
<s:iterator value="themes">
<tr>
<td class="${themeName}">Cell content</td>
</tr>
</s:iterator>
</table>
Sería mejor mover la información de estilo "hacia arriba" un nivel, por ejemplo, table.theme1 td
, pero se entiende la idea. Hacerlo permite mucha flexibilidad en el origen de la información del tema, y así sucesivamente.
<!--name attribute inside select tag must be a variable in action class with getter/setter -->
<!-- test variable sets the value of selected item in action class -->
<select name="test">
<!-- name attribute could be anything you want but value attribute must be a model class variable-->
<s:set name="lead_string_LS_ID" value="MasterDataModel.string_LS_ID" />
<!-- value attribute must be a list to iterate, status (an instanceof IteratorStatus will be pushed into stack upon each iteration)or result -->
<!-- var Name used to reference the value pushed into the Value Stack (my list contain leadSource_String_Id)-->
<s:iterator value="leadSource_list" status="result" var="leadSource_String_Id">
<!--#lead_string_LS_ID is value taken from <set> tag above. Note # must be in-front of the name
leadSource_String_Id is element specified in var of <iterator> tag
-->
<s:if test=''(#lead_string_LS_ID.equals(leadSource_String_Id))''>
<option value="<s:property value=''leadSource_String_Id''/>" selected="selected">
<s:property value="leadSource_String_Name" />
</option>
</s:if>
<s:else>
<option
value="<s:property value=''leadSource_String_Id''/>">
<s:property value="leadSource_String_Name" />
</option>
</s:else>
</s:iterator>
</select>