Check equality for action variable and list variable in struts 2?

I have a jsp page where I have a select box that has a list box for its options.

I am using s:if

to test for equality so I can display the selected option.

My code:

<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;
    }

}

      

Where campaignList is a list of objects from the campaign class.

So, in a tag, s:if

I want to check for equality between a list variable and an action variable having the same name.

Like this:

<s:if test="%{campaignId==#AR.campaignId}">

      

but it doesn't work.

+3


source to share


1 answer


To access an action variable when iterating over objects that have a variable with the same name, you can use #action

to reference a single action:

<s:if test="%{ #action.campaignId == #AR.campaignId }">

      

But it would be better to collapse your code down to the direct tag <s:select />

:



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

+2


source







All Articles