I have a jsp page in which I have a select box which have a list for its options.
I am using s:if
for checking equals so that I can show selected on a option.
My code is:
<select class="dropbox" name="campaign" id="campaign" onchange="getCampaignQuestion();">
<option value="">- Please Select -</option>
<s:iterator var="AR" value="campaignList" status="currRow">
<s:if test="%{campaignId==#AR.campaignId}">
<option value='<s:property value="%{campaignId}" />' selected >
<s:property value="%{campaignName}" />
</option>
</s:if>
<s:else>
<option value='<s:property value="%{campaignId}" />'>
<s:property value="%{campaignName}" />
</option>
</s:else>
</s:iterator>
</select>
Campaign Class
import java.util.Date;
import java.util.HashMap;
import java.util.List;
public class Campaign {
private long campaignId;
private long customerId;
private int noOfOutlets;
private String campaignName;
private String customerName;
private Date startDate;
private Date expiryDate;
private String strStartDate;
private String strExpiryDate;
private String status;
private List<Outlet> outletList;
private String outletStatus;
private List<Outlet> userOutletList;
public List<Outlet> getUserOutletList() {
return userOutletList;
}
public void setUserOutletList(List<Outlet> userOutletList) {
this.userOutletList = userOutletList;
}
public String getOutletStatus() {
return outletStatus;
}
public void setOutletStatus(String outletStatus) {
this.outletStatus = outletStatus;
}
public List<Outlet> getOutletList() {
return outletList;
}
public void setOutletList(List<Outlet> outletList) {
this.outletList = outletList;
}
public int getNoOfOutlets() {
return noOfOutlets;
}
public void setNoOfOutlets(int noOfOutlets) {
this.noOfOutlets = noOfOutlets;
}
public String getStrStartDate() {
return strStartDate;
}
public void setStrStartDate(String strStartDate) {
this.strStartDate = strStartDate;
}
public String getStrExpiryDate() {
return strExpiryDate;
}
public void setStrExpiryDate(String strExpiryDate) {
this.strExpiryDate = strExpiryDate;
}
public long getCustomerId() {
return customerId;
}
public void setCustomerId(long customerId) {
this.customerId = customerId;
}
public long getCampaignId() {
return campaignId;
}
public void setCampaignId(long campaignId) {
this.campaignId = campaignId;
}
public String getCampaignName() {
return campaignName;
}
public void setCampaignName(String campaignName) {
this.campaignName = campaignName;
}
public String getCustomerName() {
return customerName;
}
public void setCustomerName(String customerName) {
this.customerName = customerName;
}
public Date getStartDate() {
return startDate;
}
public void setStartDate(Date startDate) {
this.startDate = startDate;
}
public Date getExpiryDate() {
return expiryDate;
}
public void setExpiryDate(Date expiryDate) {
this.expiryDate = expiryDate;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
Here campaignList is a list of Campaign class objects.
So in s:if
tag I want to check equality between list variable and action varible which are having same name.
Like this:
<s:if test="%{campaignId==#AR.campaignId}">
but it's not working.
To access an action variable while iterating objects having a variable with the same name, you can use #action
to reference the action's one:
<s:if test="%{ #action.campaignId == #AR.campaignId }">
But it would be better to boil your code down to the straight <s:select />
tag:
<s:select cssClass="dropbox"
name="campaign"
id="campaign"
onchange="getCampaignQuestion();"
headerKey=""
headerValue="- Please Select -"
list="campaignList"
listKey="campaignId"
listValue="campaignName"
value="campaignId" /> <!-- no iteration, no need to differentiate it here -->
A bit cleaner, isn't it ?