test java jsp struts2 ognl struts-tags

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>