views:

3408

answers:

3

Hi,

I am new to struts 2. I am facing problem in filling Select tag with list property. The values are supplied from action class.Please provide me sample sode for this scenario.

My action class

public class TripDetailsAdd extends ActionSupport {

    @Override
    public String execute() throws Exception {
     return SUCCESS;
    }

    public String populate() {
     VehicleDAO vehicleDAO = new VehicleDAO();
     this.lstVehicles.addAll(vehicleDAO.getAllVehicles());
     return "populate";
    } 

    private String vehicleId; 
    private Collection lstVehicles = new ArrayList<VehiclesVO>();
}

Jsp page content:

<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="sform" uri="/struts-dojo-tags"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;

<%@page import="com.vms.business.dao.VehicleDAO"%>
<%@page import="java.util.Collection"%><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Trip Details</title>
</head>
<body>
<s:form action="tripDetailsAdd" method="POST" >
    <s:hidden name="expenseTypeId"></s:hidden>
    <table width="100%" height="96%" cellpadding="0" cellspacing="0">
     <tr>
      <td valign="top"><!-- Menu Starts  --> <jsp:include
       page="/pages/menu.jsp"></jsp:include> <!-- Menu End  -->
      <table width="95%" align="center">
       <tr>
        <td>
        <table width="100%" border="0" cellpadding="0" cellspacing="0">

         <tr>
          <td class="highlight">Trip Details Add</td>
          <td><s:actionerror /><s:actionmessage /></td>
         </tr>
         <tr>
          <td class="header3shadow" colspan="2"><img height="2"
           border="0" width="100%"></img></td>
         </tr>
        </table>
        <table>
         <tr>
          <td>&nbsp;</td>
         </tr>
        </table>
        <div
         style="overflow: auto; height: expression((document.body.clientHeight -80) +px ');">
        <table width="60%" cellspacing="0" cellpadding="0" border='0'>
         <tr>
          <td class="FieldTitle" valign="top">
          <table width="100%" cellspacing="4" cellpadding="0" border='0'>
          <s:select headerKey="0" headerValue="Select One" required="*" label="Vehicle No."
           labelSeparator=":"   list="lstVehicles" listKey="vehicleId" listValue="regNo"></s:select>

          </td>
         </tr>
         <tr>
          <td>
          <table width="100%" cellspacing="4" cellpadding="0" border='0'>
           <s:textfield labelposition="left" requiredposition="right"
            name="totalIncome" label="Total Income" cssStyle="FieldTitle"
            labelSeparator=":"></s:textfield>
          </table>
          </td>
         </tr>
        </table>

        <table cellpadding="0" width="60%" cellspacing="0" border="0">
         <tr>
          <td align="right"><s:submit label="Add" value="Add"></s:submit></td>
         </tr>
        </table>
        </div>

        <table border="0" cellspacing="0" cellpadding="0">
         <tr>
          <td>&nbsp;</td>

         </tr>
        </table>
        </td>
       </tr>
      </table>
      </td>
     </tr>
    </table>
</s:form>
</body>
</html>

Mapping

<action name="*TripDetailsAdd" method="{1}"
      class="com.vms.trip.presentation.TripDetailsAdd">
      <result name="success" type="redirect">showTripDetailsList
      </result>
      <result name="populate">/pages/tripdetails/TripDetailsAdd.jsp
      </result>
      <result name="error">/pages/tripdetails/TripDetailsAdd.jsp
      </result>
      <result name="input">/pages/tripdetails/TripDetailsAdd.jsp
      </result>
     </action>

In this if i add Validation file or If any error occurs in page drop down is not loading.Please help me..

+2  A: 

Struts2 select tag

<s:select label="Pets"
       name="petIds"
       list="petDao.pets"
       listKey="id"
       listValue="name"
       value="%{petDao.pets.{id}}"
/>

In the above. value = default selection, list = collection (of Map) coming from your action class, listKey = Key for map, listValue = value for map.

Edit (after looking at provided code):

your problem is that you do not have any getter in action class that corresponds with lstVehicles (which is mentioned in list property of your select tag)

Add this to your action class:

public List getLstVehicles ()
{
    return this.lstVehicles;
}
Omnipresent
A: 

dear all in JSP file i have

<s:select label="mainCategory" name="mainCategory"
            list="mainCategory" listKey="id" listValue="name" value="%{mainCategory.{id}}" required="true" />

in struts.xml file i have

<action name="add" class="com.baibai.action.C0032_AddAction">
   <result name="success">/C0031_List.jsp</result>
   <result name="input">/C0032_Add.jsp</result>
  </action>

in Java file i have

public List<DropDownList> getMainCategory() {
  List<DropDownList> ls = null;
  DropDownList dr = null;

  dr.setId(0);
  dr.setName("--please select one of these--");
  ls.add(dr);

  return ls;
 }

but the error appear tag 'select', field 'list', name 'mainCategory': The requested list key 'mainCategory' could not be resolved as a collection/array/map/enumeration/iterator type. Example: people or people.{name} - [unknown location]

do you have any suggestion

sonnguyenxuan
A: 

Hi sonnguyenxuan,

I am also having the same problem. Do you have any solution. If yes please give me suggestion

Thanks and Regards RS