Search code examples
javajspstruts2ognlstruts-tags

check equals for action variable and list variable in struts 2?


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.


Solution

  • 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 ?