I iterate through a list of items, and need to show a specific dropdown list if the state of element is equal to student or teacher. The following code shows all fields but
Put %{}
around the whole expression, not in the middle as in other attributes of other tags:
Also use a more appropriate equality function for Strings, like described here
<s:if test='%{elements[#element.index].status.equalsIgnoreCase("Student") ||
elements[#element.index].status.equalsIgnoreCase("Teacher")}'>
EDIT: dude, you are doing a lot of odd things;
${Status}
is JSP EL, you have no need of using it;<s:property value="elements[%{#element.index}].Status" />
gives you an empty result, and I can't see that elements
thing anywhere in your code;foo
and the getter is getFoo()
, in page you will have .foo
, not .Foo
. If your variable is named Foo
, it is against the specs / best practices, let's start variables names with a lowercase letter.Then If you have private Object Status
, change it to private Object status;
, along with the getter and the setter, and in page use:
<s:iterator value="listOfPeople" status="element">
<s:if test='%{listOfPeople[#element.index].status.equalsIgnoreCase("Student") ||
listOfPeople[#element.index].status.equalsIgnoreCase("Teacher")}'>
or with a var
<s:iterator value="listOfPeople" status="element" var="row">
<s:if test='%{row.status.equalsIgnoreCase("Student") ||
row.status.equalsIgnoreCase("Teacher")}'>
or simply
<s:iterator value="listOfPeople" status="element">
<s:if test='%{status.equalsIgnoreCase("Student") ||
status.equalsIgnoreCase("Teacher")}'>
Strange code leads to weird results... then use it straight :)
You don't need to have those conditions and if
tag at all if you need to have the select
tag being preselected on the Status
you should provide valid keys. The headerKey = "-1"
is invalid because it's not a String
. Try headerKey = " "
, the keys should not be empty. if the preselected value doesn't match the key the headerValue
will be shown. For example
<s:iterator value="listOfPeople" status="element">
<s:select name="elements[%{#element.index}].Status"
id="elements[%{#element.index}].Status"
label="Status"
list="#{'Student':'Student','Teacher':'Teacher'}"
headerKey=" "
headerValue=" "
value="%{Status}"/>
</s:iterator>