Iteration in struts

Hi,
I am new to struts.
I have one bean .
public class UserBean {
     private String Name;
     private String GID;
     private String CITRole;
     private String CostCenter;
     private String Status="no";
get..XXX
setXXX
I have a listArray of 100 such bean
<% UserBean users;
ArrayList userArray = new ArrayList();
for (int i=0;i<=100;i++)
users=new UserBean();
users.setName("Name"+i);
users.setGID("GID"+i);
users.setCITRole("CITRole"+i);
users.setCostCenter("CostCenter"+i);
userArray.add(users);
session.setAttribute("userArray",userArray);
%>
my prob is ,i want to iterate this data on rangesize of 10 per page
i.e on click of next , same page should display next 10 records
pls help me ..
ThanX

I would not think this should be to hard.
I would create a hidden field to store the item you are currently on (if you are displaying 1-10 then you would be on 1.... 11-20 you would be on 11.)
I would recommend JSTL for the display... something like this.
<table><tr><th>all your headers</th></tr>
<c:forEach var="data" items="${userArray}" varStatus="status">
  <c:if test="${status.count > hiddenfieldvalue&&status.count<hiddenFieldValue+10}">
      <tr><td><c:out value="${data.name}" /></td> // notice the change from Name to name
             <td><c:out value="${data.GID}" /></td>
                     ............</tr>
    </c:if>
   </c:forEach>then on the next or previous button increment or decrement the hidden field by 10 and reload the page.
But before doing that you need to make sure you follow normal java naming conventions.
ie your bean properties should start with lower case..... Name should be name, Status should be status.. then the getter and setters would be getName...

Similar Messages

  • Struts/ADF Iterator problem - how to prevent iterator from executing?

    HI
    I've a problem with a iterator which I would like NOT to execute before I order it! This is a basic Struts/ADF app developed in JDeveloper 9052 and I really don't understand why this iterator is executed!
    My binding definition file for the page contains 2 iterators, let say iterator A and B. Each iterator is bound to a different viewobject. Viewobject bound to iterator A i straightforward, but viewobject bound to iterator B has 3 bind variables - and then I don't want iterator B to execute before i have specified values for those, but I can't hold it back!
    The bindingcontainer is forced into FindMode to prevent any iterator to execute in the first place - then I thought that I would be completely in control. This works fine, until I need to execute iterator A without executing B or any other iterator. I've overridden the prepareModel() method, to accomplish this:
    protected void prepareModel(DataActionContext ctx) throws Exception {
    DCBindingContainer con = ctx.getBindingContainer();
    JUCtrlActionBinding action = (JUCtrlActionBinding)con.findCtrlBinding("ExecuteA");
    action.invoke();
    But, executing iterator A this way, also automatically executes iterator B somehow, which causes a classic JBO-27122 (not all variable bound...). If I remove the code for manually executing iterator A, I get no error, because no iterator is fired at all then. But how do I only execute one iterator in the binding container???
    To demonstrate, my JSP page only has this content:
    <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
    <html:errors/>
    Regards
    Jacob

    I don't think you can stop that.
    What I usually do to prevent result show up is to add additional condition with bind variable to programmatically make it selecting no row. vo is something like
    select aField
    from someTable
    where .....
    and :toSearch = 'Y'
    the bind variable :toSearch will be default to 'N'

  • Struts iterator displaying issue

    Hi,
    I am using struts iterator to display data from Hashtable. Everything looks perfect except one issue. logic:iterator tag does'nt displays value of Hashtable sequentially. I have no clue how to set it to display sequentially. Does anyone have any idea how to do that..
    Following is the example. I would like the hastable to be displayed sequentially as it is stored.
    <%@ page import="java.util.*"%>
    <%@ taglib uri="/logic" prefix="logic" %>
    <%@ taglib uri="/bean" prefix="bean" %>
    <%@ taglib uri="/dirview" prefix="dirview" %>
    <%
    Hashtable hs=new Hashtable();
    hs.put("uid","124");
    hs.put("seddomain","eu2");
    hs.put("ntdomain","eu2");
    hs.put("about","sac");
    hs.put("beta","b");
    hs.put("ray","r");
    hs.put("zeta","z");
    hs.put("deta","d");
    hs.put("veta","v");
    pageContext.setAttribute("hs", hs, PageContext.PAGE_SCOPE);
    %>
    <logic:iterate id="match" name="hs">
         <bean:write name='match' property='key'/> : <bean:write name='match' property='value'/>
    </logic:iterate>
    thanks a lot,
    sachin

    Well, as mentioned before, a Hashtable doesn't maintain a record of the order objects were added. I would recommend using an implementation of the List interface (most likely the ArrayList class), rather than a Map implementation (i.e. Hashtable) to store your objects. Lists are maintained in the order in which objects were added. It doesn't sound like you need the Map, as you're trying to iterate through the objects in an ordered fashion.

  • Struts and Iterated Properties

    Hi all I am in the midst of programming Struts to use iterated properties to iterate through an arrayList of Products and display a bunch of attributes from each Product (such as price, numProducts, description etc)
    Unfortunately I can get the page to display the values, but when I go to post the form the values are not there. The page is of scope=request. I am trying to use the "hand cranked lazy list" solution but not having any luck. If someone can provide a sample with the action, form and the jsp to get this working I will more than hapily provide a pile of dukes. I will post what I have so far shortly.
    thanks.
    Edit
    shoot apprarently 10 is the most you can do for one thread....

    Edit the problem that I am encountering is that it works fine when first showing the form, but when trying to submit the form there is never any results. The page displays, it is simply not displaying any data.
    Results is an array of Products.
    Products have price, numProducts, description etc all with getters and setters
    A protion of the JSP:
    <logic:notEmpty name="ProdSelectionForm" property="results" scope="request">
         <logic:iterate name="ProdSelectionForm" property="results" id="ResultsPage">
         <tr>
              <td>     <html:text  name="ResultsPage" property="description" indexed="true" />      </td>
         </tr>
         </logic:iterate>
    </logic:notEmpty>A protion of the form:
         public Product getResultsPage(int index)
              if(this.results == null)
                   this.results = new ArrayList();
              while(index >= this.results.size())
                   this.results.add(new Product());               
              return (Product) results.get(index);
         public void setResultsPage(int index, Product p)
              if(this.results == null)
                   this.results = new ArrayList();
              while(index >= this.results.size())
                   this.results.add(new Product());               
              results.set(index, p);
         public ArrayList getResultsPage()
              if(this.results == null)
                   this.results = new ArrayList();
              return results;
         public void setResults(ArrayList results)
            this.results=results;
         public ArrayList getResults()
            return this.results;
         }     Aprotion of the action:
         // this is called the first time that the page is hit
         if(action.equals("populate"))
                   order.getProducts();
                   Order  o = user.getOrder(user.getCurrOrderId());
                   prodSelection.setResults(o.getProducts());
                   prodSelection.setResults(o.getProducts());
                   prodSelection.setTest("" +order.getProductsSize()  +" and for order " + o.getProductsSize() );
                   //request.setAttribute("prodSelectionForm", prodSelection);
              // this is called when the user submits the form                    
              if(action.equals("Delete"))
                   pageRes = prodSelection.getResultsPage();
                   int count = 0;
                   ArrayList p = new ArrayList();
                   prodSelection.setTest(prodSelection.getTest()+" NEW: " + pageRes.size()  );
                   return mapping.findForward("success");
              return mapping.findForward("success");
         }

  • Output Value From Struts Iterator tag

    I have a jsp with the following code:
    <logic:iterate id="row" name="Prefs">
    <tr>
    <td>
    <bean:write name="row" property="userPrefId"/>
    <html:submit onclick="setWKey('defaultFilter',${row.userPrefId});" value="Default"/>
    </td>
    </tr>
    how can i get the value of row.userPrefId into the onclick event for my submit button. No matter what I try it doesn't seem to work. (the bean:write in the line above prints the value I want ).
    Thanks
    troy

    I believe the "onChange" attribute has to be "onchange" in order for it to work (jsp tags are case sensitive)
    The generated html should look something like this:
    <select name="columnAssumptionsData(1)" class="YT-input-field" onchange="javascript:loadScenario(this); return false;">
    <option value="1">label1
    <option value="2">label2
    </select>Then your javascript function would be
      function loadScenario(changedSelect){
        var currentValue = changedSelect.value;
        var selectedIndex = changedSelect.selectedIndex;
        var selectedOption = changedSelect.options[selectedIndex];
      }You can then manipulate it in javascript to your hearts content.
    However you can NOT run any java code until you resubmit the form.
    Java and javascript are NOT the same thing
    (forgive me if you know that already, but the amount of posts we get here about this...)
    Cheers,
    evnafets

  • Html:link not working in struts project driving me mad, please help...

    Afternoon all,
    Can anyone help me with an issue I'm having with my first struts project, I'm learning as I go.
    Anyway, I'm trying to create a bog standard hypertext link which passes a value back to a specified struts action. The flow of the application
    is as follows:
    1) search.jsp
    User enters a name and postcode to search on, then click submit
    2) searchAction
    Struts action 'search' is called and does the search in a back-end db.
    Each result found from search is created as a javabean (named resultsBean), and added to a list object. The list object is set as a request
    attribute named 'SearchResults'.
    The action is then forwarded on to another jsp page named results.jsp
    3) results.jsp
    The results.jsp page retrieves the list object from the 'SearchResults' attribute and loops through each entry
    in the list and converts each entry to the 'resultsBean' javabean object.
    Each resultsBean object has a getVirtualID method which stores a string value. This value is retrieved and a hypertext link is created which
    passes this value on to another struts action named 'select'.
    When this link is clicked on, the select struts action is called and the value passed as a parameter is retrieved.
    This is the part I can't get to work, I can't get the link to render properly. When I click the link the select action retrieves
    & lt;%= resultsBean.getVirtualID() & gt; as the value of the parameter 'vid' instead of the value stored in the getVirtualID method of the resultsBean.
    Listed below is the code from my results.jsp page. If anyone can help me get this to work I would be very grateful.
    Thanks in advance,
    Alex
    results.jsp code
    <%
       List searchResults = (List)portletRequest.getPortletSession().getAttribute("SearchResults");
    %>
    <div id="table_layout" style="width: 713px; margin: 0px 0px 0px 3px;">
      <div id="row">
        <div id="column"><img src='<%= response.encodeURL("/images/results.gif") %>' alt="" width="223" height="159" border="0" /></div>
         <div id="column" style="width: 30px;"></div>
         <div id="column">
          <div id="table_layout" style="width: 460px;">
            <div id="row" style="width: 430px; border-bottom: 1px solid #4e137d;">
              <div id="column" style="width: 155px;">Name</div>
              <div id="column" style="width: 10px;"> </div>
              <div id="column" style="width: 130px;">Address</div>
              <div id="column" style="width: 10px;"> </div>
              <div id="column" align="right" style="width: 120px;">References</div>
            </div>
    <% if (searchResults.size() > 0) {
           Iterator it = searchResults.subList(0, searchResults.size()).iterator();
           ResultsBean resultsBean = new ResultsBean();
           while (it.hasNext()) {
                resultsBean = (ResultsBean)it.next(); %>
            <div id="row" style="padding: 5px 0px 10px 0px;">
              <div id="column" style="width: 155px;"><html:link styleClass="results"  page="/select.do?vid='<%= resultsBean.getVirtualId() %>'" title="<%= resultsBean.getFullName() %>"><%= resultsBean.getFullName() %></html:link></div>
              <div id="column" style="width: 10px;"></div>
              <div id="column" style="width: 130px;"><%= resultsBean.getFullAddress() %></div>
              <div id="column" style="width: 10px;"></div>
              <div id="column" align="right" style="width: 120px;"><%= resultsBean.getReferenceIcons(portletResponse) %></div>
              <div id="column" style="width: 13px;"></div>
              <div id="column" style="width: 22px;"><input id="<%= resultsBean.getVirtualId() %>" name="ckbox" type="checkbox" value="" title="tick to select for merging" style="border: 0px solid #ffffff;"></div>
            </div>
    <%     }
       } %>
           </div>
         </div>
      </div>
    </div>
    <br />
    <br />
    <html:link forward="/searchpage">Return to search page</html:link>

    If you have part of an attribute dynamic, you need to make the entire attribute an expression.
    ie instead of
    page="/select.do?vid='<%= resultsBean.getVirtualId() %>'"
    it has to be
    page="<%= "/select.do?vid=" + resultsBean.getVirtualID() %>"
    However for my approach, I would aim for zero scriptlets, and use the struts tags even more. For instance instead of an iterator, use the struts logic:iterate tag (or the JSTL c:forEach>
    Also instead of div tags, I would use html table tags - <table> <tr><td> etc etc. Thats what its for right?
    Here is at least some of it rewritten with struts tags.
    I left out the div tags so I could focus on the "important" stuff.
    <logic:iterate id="resultsBean" name="SearchResults">
      <html:link styleClass="results"  page="/select.do" paramId="vid" paramName = "resultsBean" paramProperty="virtualId">
        <bean:write name="resultsBean" property="fullName"/>
      </html:link>
      <bean:write name="resultsBean" property="fullAddress"/>
    <%= resultsBean.getReferenceIcons(portletResponse) %>
    <input id="<%= resultsBean.getVirtualId() %>" name="ckbox" type="checkbox" value="" title="tick to select for merging" style="border: 0px solid #ffffff;">
    </logic:iterate>I'm not entirely certain what you are doing with that checkbox at the end. They all have the same name, but no value. You couldn't identify at the server end which one was clicked.
    Hope this helps some,
    evnafets

  • Urgent doubt in struts

    Hi,
    I have created the code for search employee from database values,
    my struts code in search.jsp is
    <logic:present name="searchForm" property="results">
    <hr width="100%" size="1" noshade="true">
    <bean:size id="size" name="searchForm" property="results"/>
    <logic:equal name="size" value="0">
    <center><font color="red"><b>No Employees Found</b></font></center>
    </logic:equal>
    <logic:greaterThan name="size" value="0">
    <table border="1">
    <tr>
    <th>Name</th>
    <th>Social Security Number</th>
    </tr>
    <logic:iterate id="result" name="searchForm" property="results">
    <tr>
    <td><bean:write name="result" property="name"/></td>
    <td><bean:write name="result" property="ssNum"/></td>
    </tr>
    </logic:iterate>
    </table>
    </logic:greaterThan>
    </logic:present>
    2. Also i created the code for searchForm for get and set methods
    3. As i created the servlet code as also searchAction.java
    4. the following code used to generate the search values from database as the following code
    EmployeeSearchService.java
    public ArrayList searchByName(String name) {
    ArrayList resultList = new ArrayList();
    EmployeeImp Emp=new EmployeeImp();
    ArrayList results =Emp.searchName(name);
    Iterator Int=results.iterator();
    while(Int.hasNext())
    Employee ep=(Employee)Int.next();
    String Name=ep.getName();
    String SSNum=ep.getSsNum();
    resultList.add(Name);
    resultList.add(SSNum);
    return resultList;
    5. EmployeeImp.java contain database connection and search code as
    public ArrayList searchName(String name1)
    {      //External Interface
    ArrayList resultList = new ArrayList();
    ResultSet resultSet = null;
    Statement aStmt2 = null;
    String url="jdbc:odbc:test";
    String uname="root";
    String pwd="root";
    String name="";
    try {
    Connection con=getConnection();
    aStmt2 = con.createStatement();
    String query2 = "SELECT SSNO,NAME FROM EMPLOYEE WHERE NAME ='"+ name1 +"'";
    //cat.debug(query2);
    resultSet = aStmt2.executeQuery(query2);
    while(resultSet.next())
    Employee tvo=new Employee();
    name = resultSet.getString("NAME");
    String SsNum1 = resultSet.getString("SSNO");
    tvo.setName(name);
    tvo.setSsNum(SsNum1);
    // Employee tvo = new Employee(name,SsNum1);
    resultList.add(tvo);
    catch (Exception e) {
    System.out.println( e);
    e.printStackTrace();
    return resultList;
    public ArrayList searchSSNo(String ssNum)
    ArrayList resultList = new ArrayList();
    ResultSet resultSet = null;
    Statement aStmt2 = null;
    String url="jdbc:odbc:test";
    String uname="root";
    String pwd="root";
    String name="";
    try {
    Connection con=getConnection();
    aStmt2 = con.createStatement();
    String query="SELECT SSNO,NAME FROM EMPLOYEE WHERE SSNO ='"+ ssNum +"'";
    // cat.debug(query);
    resultSet = aStmt2.executeQuery(query);
    while(resultSet.next())
    Employee tvo=new Employee();
    name = resultSet.getString("NAME");
    String SsNum1 = resultSet.getString("SSNO");
    tvo.setName(name);
    tvo.setSsNum(SsNum1);
    // Employee tvo = new Employee(name,SsNum1);
    resultList.add(tvo);
    catch (Exception e) {
    System.out.println( e);
    e.printStackTrace();
    return resultList;
    My error is:
    javax.servlet.ServletException: No getter method for property name of bean result
         org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:848)
         org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:781)
         org.apache.jsp.search_jsp._jspService(search_jsp.java:239)
         org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
         javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
         org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
         org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
         org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
         javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
         org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)
         org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1056)
         org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:261)
         org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:388)
         org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:316)
         org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:231)
         org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
         org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:415)
         javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
         javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
         org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)
    I am new to struts how can correct is.
    Plz reply me. its urgent

    Hi,
    My SearchForm.java contain you said plz verify it..
    public class SearchForm extends ActionForm
    private String name = null;
    private String ssNum = null;
    private List results = null;
    private List result = null;
    public void setName(String name) {
    this.name = name;
    public String getName() {
    return name;
    public void setSsNum(String ssNum) {
    this.ssNum = ssNum;
    public String getSsNum() {
    return ssNum;
    public void setResults(List results) {
    this.results = results;
    public List getResults() {
    return results;
    public void setResult(List result) {
    this.result = result;
    public List getResult() {
    return result;
    After also the same error ...

  • Getting error while file uploading in struts

    Hi!
    I am getting this error while file uploading,I can't find any solution.
    SRVE0026E: [Servlet Error]-[org.apache.commons.fileupload.FileUpload: method setSizeMax&#40;I&#41;V not found]: javax.servlet.ServletException: org.apache.commons.fileupload.FileUpload: method setSizeMax(I)V not found
         at com.honeywell.sdm.base.controller.SDMActionServlet.service(SDMActionServlet.java:75)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
         at com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java:110)
         at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java:174)
         at com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java:313)
         at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java:116)
         at com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java:283)
         at com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java:42)
         at com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java:40)
         at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java:983)
         at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:564)
         at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:200)
         at com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java:119)
         at com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java:276)
         at com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocation(CachedInvocation.java:71)
         at com.ibm.ws.webcontainer.cache.invocation.CacheableInvocationContext.invoke(CacheableInvocationContext.java:116)
         at com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java:186)
         at com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSEListener.java:334)
         at com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java:56)
         at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:618)
         at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:439)
         at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:672)
    Please help me.I have attached the bean,action ,jsp pages
    uploadInfo.jsp
    <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
    <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
    <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
    <html:html>
    <HEAD>
    <script>
    function submitting(){
    document.uploadForm.operation.value = "uploadOrgAdj";
    document.uploadForm.action = "/uploadRecAction.do";
    document.uploadForm.submit();
    </script>
    </HEAD>
    <body>
    <html:form action="/uploadRecAction" method="post" enctype="multipart/form-data">
    <b>Select the .xls File to upload data </b>
    <html:file property="fileName"></html:file>
    <html:hidden property="operation" value=""/>
    <html:button property="btn" value="Submit" onclick="submitting()"></html:button>
    </html:form>
    </body>
    </html:html>
    uploadAdjForm :
    import javax.servlet.http.HttpServletRequest;
    import org.apache.struts.action.ActionError;
    import org.apache.struts.action.ActionErrors;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionMapping;
    import org.apache.struts.upload.FormFile;
    public class uploadAdjForm extends ActionForm{
         private FormFile fileName;
              * @return
              public FormFile getFileName() {
                   System.out.println("getFileName"+fileName);
                   return fileName;
              * @param string
              public void setFileName(FormFile string) {
                   System.out.println("setileNmame"+string);
                   fileName = string;
    Action:
    public class uploadFinancialAdjAction extends DispatchAction{     
         public org.apache.struts.action.ActionForward uploadOrgAdj(org.apache.struts.action.ActionMapping mapping, org.apache.struts.action.ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws Exception {
              String sForward = "UploadInfo";               
              HttpSession session = request.getSession();          
              String sStartIndex = null;
              String sEndIndex = null;
    try
         uploadFinancialAdjForm UploadForm=(uploadFinancialAdjForm)form;
         System.out.println(UploadForm.getFileName().getContentType().toString());
         String file=UploadForm.getFileName().toString();     
    uploadFinancialAdjManager businessManager = new uploadFinancialAdjManager();
         ArrayList fileName = new ArrayList();                                   fileName = businessManager.getOrgAdjDetails(file);
              boolean isMultipart = FileUpload.isMultipartContent(request);
              if(isMultipart){
              // Create a new file upload handler
              DiskFileUpload upload = new DiskFileUpload();
              // Parse the request
              List items = upload.parseRequest(request);
              //Process the uploaded items
              Iterator iter = items.iterator();
              while (iter.hasNext()) {
                   FileItem item = (FileItem) iter.next();
                   if (item.isFormField()) {          
              //processFormField(item);
              if(item.getFieldName().equalsIgnoreCase("txtStartIndex")){          
                   sStartIndex = item.getString();          
              else if(item.getFieldName().equalsIgnoreCase("txtEndIndex")){
                             sEndIndex = item.getString();          
    uploadFinancialAdjForm UploadForm=(uploadFinancialAdjForm)form;
                             String file=UploadForm.getFileName().toString();               
              uploadFinancialAdjManager businessManager = new uploadFinancialAdjManager();
                             ArrayList fileName = new ArrayList();
                             fileName = businessManager.getOrgAdjDetails(file);
              }else{
                   if(item.getName()!=null && !item.getName().toUpperCase().endsWith(".XLS")){
              throw new Exception("Please browse an excel file and Upload");
              session.setAttribute("fileItem",item);
              }//end of while
              session.setAttribute("startIndex",sStartIndex);
              session.setAttribute("endIndex",sEndIndex);
              request.setAttribute("FileUploadStatus","true");
              else{
              throw new Exception("Error:Form is not multipart");
    catch(Exception e)
         System.out.println(e);
         return mapping.findForward(sForward);
    }

    ORA-06512: at "PREPRD.OIM_SP_RECONARCHIVAL", line 722
    ORA-00942: table or view does not exist
    ORA-01031: insufficient privileges
    (1) Check whether the OIM_SP_RECONARCHIVAL table or view exists or not...
    (2) If it exists, check whether the DEV_OIM user has enough privilege to view this table or not...
    If not, give it all privilege by login as sys as sysdba
    GRANT ALL PRIVILEGES TO DEV_OIM;
    COMMIT;

  • Org.eclipse.swt.SWTException: Invalid thread access - Action struts

    Hi
    I�m runing this WordSearchReplace java class that I got here in this forum, and I�m runing it doing search and replace in Ms word document if I run just one time it works ok, but if I run twice i got that erro, I�m runing that java class in my Action on struts.
    I don�t know what is occur.
    Can you help me?
    Thanks
    Following the example of call, mistakes and java class.
    //======RUNING THE WordSearchReplace JAVA CLASS=========
    WordSearchReplace wordSR = null;
    try {
    String[] v_text = {"#V46#","#V42#"};
    String[] v_replace = {"Texto1","Texto2"};
    wordSR = new WordSearchReplace();
    wordSR.openFile(v_path+v_file_name);
    for ( int i=0; i<v_text.length; i++ )
    wordSR.replace( v_text, v_replace[i] );
    wordSR.save();
    wordSR.closeFile();
    catch(Exception e) {
    System.out.println("Caught: ERRO ao Executar WordSearchReplace " + e.getClass().getName());
    System.out.println(e.getMessage());
    e.printStackTrace(System.out);
    finally {
    if(wordSR != null) {
    try {
    wordSR.dispose();
    catch(Exception innerE) {
    System.out.println("Caught: " + innerE.getClass().getName());
    System.out.println(innerE.getMessage());
    innerE.printStackTrace(System.out);
    //========ERRO ===========================
    17:24:49,093 INFO [STDOUT] Invalid thread access
    17:24:49,093 INFO [STDOUT] org.eclipse.swt.SWTException: Invalid thread access
    17:24:49,093 INFO [STDOUT] at org.eclipse.swt.SWT.error(SWT.java:3563)
    17:24:49,093 INFO [STDOUT] at org.eclipse.swt.SWT.error(SWT.java:3481)
    17:24:49,093 INFO [STDOUT] at org.eclipse.swt.SWT.error(SWT.java:3452)
    17:24:49,093 INFO [STDOUT] at org.eclipse.swt.widgets.Widget.error(Widget.java:432)
    17:24:49,093 INFO [STDOUT] at org.eclipse.swt.widgets.Shell.<init>(Shell.java:274)
    17:24:49,093 INFO [STDOUT] at org.eclipse.swt.widgets.Shell.<init>(Shell.java:265)
    17:24:49,093 INFO [STDOUT] at org.eclipse.swt.widgets.Shell.<init>(Shell.java:218)
    17:24:49,093 INFO [STDOUT] at org.eclipse.swt.widgets.Shell.<init>(Shell.java:156)
    17:24:49,093 INFO [STDOUT] at br.com.tryblob.view.WordSearchReplace.<init>(WordSearchReplace.java:38)
    17:24:49,093 INFO [STDOUT] at br.com.tryblob.view.WordAction.execute(WordAction.java:70)
    17:24:49,093 INFO [STDOUT] at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
    17:24:49,093 INFO [STDOUT] at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
    17:24:49,093 INFO [STDOUT] at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
    17:24:49,093 INFO [STDOUT] at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
    17:24:49,093 INFO [STDOUT] at javax.servlet.http.HttpServlet.service(HttpServlet.java:697)
    //====== WordSearchReplace JAVA CLASS=========
    import java.util.ArrayList;
    import java.util.Iterator;
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.SWTException;
    import org.eclipse.swt.internal.ole.win32.TYPEATTR;
    import org.eclipse.swt.ole.win32.OLE;
    import org.eclipse.swt.ole.win32.OleAutomation;
    import org.eclipse.swt.ole.win32.OleClientSite;
    import org.eclipse.swt.ole.win32.OleFrame;
    import org.eclipse.swt.ole.win32.OleFunctionDescription;
    import org.eclipse.swt.ole.win32.OlePropertyDescription;
    import org.eclipse.swt.ole.win32.OleParameterDescription;
    import org.eclipse.swt.widgets.Shell;
    import org.eclipse.swt.ole.win32.Variant;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileWriter;
    import java.io.BufferedWriter;
    import java.io.IOException;
    public class WordSearchReplace {
         private static final String PROG_ID = "Word.Application";
         private static final int WD_REPLACE_ALL = 2;
         private static final int WD_FIND_CONTINUE = 1;
         private Shell shell = null;
         private OleFrame frame = null;
         private OleClientSite wordSite = null;
         private OleAutomation wordAutomation = null;
         private OleAutomation activeDocumentAutomation = null;
         private boolean cleaned = false;
         * Create a new instance of the WordSearchReplace class.
         public WordSearchReplace() {
              this.shell = new Shell();
              this.frame = new OleFrame(this.shell, SWT.NONE);
              this.wordSite = new OleClientSite(this.frame, SWT.NONE, WordSearchReplace.PROG_ID);
         this.wordAutomation = new OleAutomation(this.wordSite);
         * Open an MS Word file. This is a file whose name ends with the extension
         * .doc or .doc and which conforms to the correct format.
         * Note; if it is possible to open the named file, an attempt is made
         * to cache an OleAutomation object referencing that file which will be
         * referred to in future as the active document. Most other methods
         * need to capture references to further OleAutomation(s) that have the
         * active document as their root.
         * @param fileName An instance of the String class that encapsulates the
         * path to and name of the file that is to be opened.
         * Note; the full path name must be supplied as Word
         * will be opening the file and no assumptions can
         * safely be made concerning the applications 'home'
         * folder.
         * @throws NullPointerException if a null value is passed to the fileName
         * parameter.
         * @throws FileNotFoundException if it is not possible to locate the
         * file.
         * @throws IllegalArgumentException if the name of the file does not end
         * with either the .dot or .doc extensions.
         * @throws SWTException if a problem occurs whilst invoking any of the OLE
         * methods.
         public void openFile(String fileName) throws SWTException,
         NullPointerException,
         FileNotFoundException,
         IllegalArgumentException {
              OleAutomation documentsAutomation = null;
              int[] id = null;
              Variant[] arguments = null;
              Variant invokeResult = null;
              try {
                   // Check the the file name is not null
                   if(fileName == null) {
                        throw new NullPointerException("Null value passed to " +
                             "fileName parameters of the openFile() method.");
                   // Check the the file names ends with '.dot' or '.doc'.
                   // Remember to include templates and docuemnts
                   if(!(fileName.endsWith(".doc")) && !(fileName.endsWith(".dot"))) {
                        throw new IllegalArgumentException(
                             "The filename must end with the extensions \'.doc\' or \'.dot\'");
                   // Check that the file exists
                   File fileToPrint = new File(fileName);
                   if(!(fileToPrint.exists())) {
                        throw new FileNotFoundException("The file " +
                        fileName +
                        "cannot be found.");
                   // From the application, get an automation for the Documents property
                   documentsAutomation = this.getChildAutomation(this.wordAutomation,
                   "Documents");
                   // Get the ID of the Open method
                   id = documentsAutomation.getIDsOfNames(new String[]{"Open"});
                   if(id == null) {
                        throw new SWTException("It was not possible to recover an " +
                        "identifer for the Open method in WordSearchReplace.openFile().");
                   // Build an array of parameters - holds just the file name
                   arguments = new Variant[1];
                   arguments[0] = new Variant(fileName);
                   // Invoke the Open method on the Documents property
                   invokeResult = documentsAutomation.invoke(id[0], arguments);
                   // If the call to invoke the open method failed, throw an SWTException
                   // to terminate processing.
                   if(invokeResult == null) {
                        throw new SWTException("An error occurred whilst invoking the " +
                             "Open method for the following file: " +
                             fileName +
                             " in WordSearchReplace.openFile().");
                   // If it was possible to open the document successfully, grab an
                   // automation object referencing the active document here.               
                   else {
                        this.activeDocumentAutomation = this.getChildAutomation(
                             this.wordAutomation, "ActiveDocument");
              finally {
                   // If the automation was instantiated then dispose of it to
                   // release resources. This OleAutomation was only required
                   // to open the file and can safely be released here.
                   if(documentsAutomation != null) {
                        documentsAutomation.dispose();
         * Save the currently open file - the active document.
         * @throws SWTException if a problem occurs whilst invoking any of the OLE
         * methods.
         public void save() throws SWTException {
              int[] id = null;
              Variant invokeResult = null;
              // From the automation for the ActiveDocument object, get an id for
              // the Save method
              id = this.activeDocumentAutomation.getIDsOfNames(new String[]{"Save"});
              // If it was not possible to recover the id of the Save
              // method, throw an exception to notify the user and terminate
              // processing.
              if(id == null) {
                   throw new SWTException("Unable to obtain an automation for " +
                        "the Save method in WordSearchReplace.save().");
              // Invoke the Save method and catch the value returned
              invokeResult = this.activeDocumentAutomation.invoke(id[0]);
              // If a null value was returned then the invocation of the
              // Save method failed. Throw an exception to notify the
              // user and terminate processing.
              if(invokeResult == null) {
                   throw new SWTException("A problem occurred invoking the " +
                        "Save method in WordSearchReplace.save().");
         * Save the active document using the name provided.
         * @param fileName Am instance of the String class encapsulating the name
         * for the file. Again, the path to and name of the file should
         * be supplied.
         * @throws NullPointerException if a null value is passed to the fileName
         * parameter.
         * @throws IllegalArgumentException if either an empty String is passed
         * to the fileName parameter or if the files name does not end
         * with one of the two permissible extensions - .dot and .doc
         public void saveAs(String fileName) throws SWTException,
         NullPointerException,
         IllegalArgumentException {
              int[] id = null;
              Variant[] arguments = null;
              Variant invokeResult = null;
              // If the fileName parameter is passed a null
              // value, throw an exception.
              if(fileName == null) {
                   throw new NullPointerException("A null value was passed to " +
                        "the fileName parameter of WordSearchReplace.saveAs().");
              // If the fileName parameter has been passed an empty String
              // then again throw an exception.
              if(fileName.length() == 0) {
                   throw new NullPointerException("An empty string was passed " +
                        "to the fileName parameter of WordSearchReplace.saveAs().");
              // Finally, make sure the file name ends in either
              // .doc or .dot.
              if((!fileName.endsWith(".dot")) && (!fileName.endsWith(".doc"))) {
                   throw new IllegalArgumentException("An illegal file name was " +
                        "passed to the fileName parameter of " +
                        "WordSearchReplace.saveAs(). The file name must " +
                        "end in \'.dot\' or \'.doc\'.");
              // From the automation for the ActiveDocument object, get an id for
              // the SaveAs method
              id = this.activeDocumentAutomation.getIDsOfNames(new String[]{"SaveAs"});
              // If it was not possible to recover the id of the SaveAs
              // method, throw an exception to notify the user and terminate
              // processing.
              if(id == null) {
                   throw new SWTException("Unable to obtain an automation for " +
                        "the SaveAs method in WordSearchReplace.saveAs().");
              // Build the array of arguments that will be passed to the invoke
              // method when the SaveAs method is invoked. In this case, this
              // array will contain a single member - a String object encapsulating
              // the path to and name of the output file.
              arguments = new Variant[1];
              arguments[0] = new Variant(fileName);
              // Invoke the SaveAs method and catch the value returned
              invokeResult = this.activeDocumentAutomation.invoke(id[0], arguments);
              // If a null value was returned then the invocation of the
              // PrintOut method failed. Throw an exception to notify the
              // user and terminate processing.
              if(invokeResult == null) {
                   throw new SWTException("A problem occurred invoking the " +
                        "SaveAs method in WordSearchReplace.saveAs().");
         * Mimics Words 'replace' functionality by searching the active
         * document for evey string of characters that matches the value passed to
         * the searchTerm parameter and replacing them with the string of
         * characters passed to the replacementTerm method.
         * It is possible to code a VBA macro within Word that will perfrom a serach
         * and replace. That code would look like the following;
         * <pre>
         *      Selection.Find.ClearFormatting
    *     Selection.Find.Replacement.ClearFormatting
    *     With Selection.Find
    *      .Text = "serach"
    *      .Replacement.Text = "search"
    *      .Forward = True
    *      .Wrap = wdFindContinue
    *      .Format = False
    *      .MatchCase = False
    *      .MatchWholeWord = False
    *      .MatchWildcards = False
    *      .MatchSoundsLike = False
    *      .MatchAllWordForms = False
    *     End With
    *     Selection.Find.Execute Replace:=wdReplaceAll
    * <pre>
    * and this method will 'automate' it.
         * @param searchTerm An instance of the String class that will encapsulate
         * the series of characters that should be replaced.
         * @param replacementTerm An instance of the String class that will
         * encapsulate the series of characters that should replace the
         * searchTerm.
         * @throws NullPointerException if a null value is passed to either the
         * searchTerm or replacementTerm methods.
         * @throws SWTException if a problem occurs when invoking any of the
         * OLE methods.
         public void replace(String searchTerm,
         String replacementTerm) throws SWTException,
         NullPointerException {
              OleAutomation selectionFindAutomation = null;
              OleAutomation childAutomation = null;
              Variant[] arguments = null;
              Variant invokeResult = null;
              int[] id = null;
              int[] namedArguments = null;
              boolean success = true;
              // Validate the searchTerm parameter and throw exception if
              // null value passed.
              if(searchTerm == null) {
                   throw new NullPointerException("Null value passed to " +
                             "searchTerm parameter of the replace() method.");
              // Validate the replacementTerm parameter and throw exception if
              // null value passed.
              if(replacementTerm == null) {
                   throw new NullPointerException("Null value passed to " +
                             "replacementTerm parameter of the replace() method.");
              // Most of the VBA instructions used to perform the search and
              // replace functionality and child automations of Selection.Find,
              // therefore, it is wise to cache that automation first.
              // From the application, get an automation for the Selection property
              childAutomation = this.getChildAutomation(this.wordAutomation,
                   "Selection");
              selectionFindAutomation = this.getChildAutomation(childAutomation,
              "Find");
              // Next, using the cached automation, invoke the 'ClearFormatting'
              // method, validate the returned value and invoke the method.
              // Selection.Find.ClearFormatting
              id = selectionFindAutomation.getIDsOfNames(new String[]{"ClearFormatting"});
              if(id == null) {
                   throw new SWTException("It is not possible to recover an identifier " +
                        "for the ClearFormatting method in WordSearchReplace.replace() " +
                        "when clearing the formatting for the search string.");
              invokeResult = selectionFindAutomation.invoke(id[0]);
              if(invokeResult == null) {
                   throw new SWTException("A problem occurred invoking the " +
                        "ClearFormatting method in WordSearchReplace.repace() " +
                        "when clearing formatting for the search string.");
              // Now, perform the same function but for the replacement string.
              // Selection.Find.Replacement.ClearFormatting
              childAutomation = this.getChildAutomation(selectionFindAutomation,
              "Replacement");
              id = childAutomation.getIDsOfNames(new String[]{"ClearFormatting"});
              if(id == null) {
                   throw new SWTException("It is not possible to recover an identifier " +
                        "for the ClearFormatting method in WordSearchReplace.replace() " +
                        "when clearing the formatting for the replacement string.");
              invokeResult = childAutomation.invoke(id[0]);
              if(invokeResult == null) {
                   throw new SWTException("A problem occurred invoking the " +
                        "ClearFormatting method in WordSearchReplace.repace() " +
                        "when clearing formatting for the replacement string.");
              // Firstly, set the search text.
              // .Text = "search term"
              arguments = new Variant[1];
              arguments[0] = new Variant(searchTerm);
              success = this.setPropertyValue(selectionFindAutomation, "Text", arguments);
              if(!success) {
                   throw new SWTException("A problem occurred setting the Text " +
                        "property for the search string in WordSearchReplace.replace().");
              // Next, the replacement text
              // .Replacement.Text = "replacement term"
              childAutomation = this.getChildAutomation(selectionFindAutomation,
              "Replacement");
              arguments[0] = new Variant(replacementTerm);
              success = this.setPropertyValue(childAutomation, "Text", arguments);
              if(!success) {
                   throw new SWTException("A problem occurred setting the Text property" +
                        " for the replacement string in WordSearchReplace.replace().");
              // Set the direction of the search - forward in this case.
              // .Forward = True
              arguments[0] = new Variant(true);
              success = this.setPropertyValue(selectionFindAutomation, "Forward", arguments);
              if(!success) {
                   throw new SWTException("A problem occurred setting the Forward " +
                        "property in WordSearchReplace.replace().");
              // Tell the search to wrap. Note the literal wdFindContinue relates to
              // a constant that is defined within Word. I have provided a static
              // final to replace it called WD_FIND_CONTINUE
              // .Wrap = wdFindContinue
              arguments[0] = new Variant(WordSearchReplace.WD_FIND_CONTINUE);
    // System.out.println("jose vieira WD_FIND_CONTINUE:" + arguments[0]);
              success = this.setPropertyValue(selectionFindAutomation, "Wrap", arguments);
              if(!success) {
                   throw new SWTException("A problem occurred setting the Wrap " +
                        "property in WordSearchReplace.replace().");
              // Set the Format property to False.
              // .Format = False
              arguments[0] = new Variant(false);
              success = this.setPropertyValue(selectionFindAutomation, "Format", arguments);
              if(!success) {
                   throw new SWTException("A problem occurred setting the Format " +
                        "property in WordSearchReplace.replace().");
              // Set the MatchCase property to false.
              // .MatchCase = False
              arguments[0] = new Variant(false);
              success = this.setPropertyValue(selectionFindAutomation, "MatchCase", arguments);
              if(!success) {
                   throw new SWTException("A problem occurred setting the MatchCase " +
                        "property in WordSearchReplace.replace().");
              // Set the MatchWholeWord property to false.
              // .MatchWholeWord = False
              arguments[0] = new Variant(false);
              success = this.setPropertyValue(selectionFindAutomation, "MatchWholeWord", arguments);
              if(!success) {
                   throw new SWTException("A problem occurred setting the " +
                        "MatchWholeWord property in WordSearchReplace.replace().");
              // Set the MatchWildCards property to false.
              // .MatchWildcards = False
              arguments[0] = new Variant(false);
              success = this.setPropertyValue(selectionFindAutomation, "MatchWildCards", arguments);
              if(!success) {
                   throw new SWTException("A problem occurred setting the " +
                        "MatchWildCards property in WordSearchReplace.replace().");
              // Set the MatchSoundsLike property to false.
              // .MatchSoundsLike = False
              arguments[0] = new Variant(false);
              success = this.setPropertyValue(selectionFindAutomation, "MatchSoundsLike", arguments);
              if(!success) {
                   throw new SWTException("A problem occurred setting the " +
                        "MatchSoundsLike property in WordSearchReplace.replace().");
              // Set the MatchAllWordForms property to false.
              // .MatchAllWordForms = False
              arguments[0] = new Variant(false);
              success = this.setPropertyValue(selectionFindAutomation, "MatchAllWordForms", arguments);
              if(!success) {
                   throw new SWTException("A problem occurred setting the " +
                        "MatchAllWordForms property in WordSearchReplace.replace().");
              // Invoke the Execute command passing the correct value to the Replace
              // parameter. Again, wdReplaceAll is a constant that I have provided
              // a ststic final for called WD_REPLACE_ALL
              // Selection.Find.Execute Replace:=wdReplaceAll
              id = selectionFindAutomation.getIDsOfNames(new String[]{"Execute", "Replace"});
              if(id == null) {
                   throw new SWTException("It was not possible to recover an identifier " +
                        "for the Execute method in WordSearchReplace.replace().");
              arguments = new Variant[1];
              arguments[0] = new Variant(WordSearchReplace.WD_REPLACE_ALL);
              namedArguments = new int[1];
              namedArguments[0] = id[1];
              // There was some indication that the invokeNoReply method should
              // be used when making this call but no, invoke SEEMS to work well
              //selectionFindAutomation.invokeNoReply(id[0], arguments, namedArguments);
              invokeResult = selectionFindAutomation.invoke(id[0], arguments, namedArguments);
              if(invokeResult == null) {
                   throw new SWTException("A problem occurred trying to invoke the " +
                   "Execute method in WordSearchReplace.replace().");
         * Close the active document.
         * @throws SWTException if a problem is encountered invoking any of the
         * OLE methods.
         public void closeFile() throws SWTException {
              int[] id = null;
              Variant[] arguments = null;
              Variant invokeResult = null;
              try {
                   // From the OleAutomation referencing the active document, recover
                   // the id of the Close method.
                   id = this.activeDocumentAutomation.getIDsOfNames(new String[]{"Close"});
                   // If it was not possible to recover the id of the Close
                   // method then throw an exception to notify the user and
                   // terminate processing.
                   if(id == null) {
                        throw new SWTException("It was not possible to recover an " +
                             "identifier for the Close method in " +
                             "WordSearchReplace.closeFile().");
                   // Invoke the Close method on the ActiveDocument automation
                   invokeResult = this.activeDocumentAutomation.invoke(id[0]);
                   // If the invocation of the Close method failed, throw an
                   // exception to notify the user and terminate processing.
                   if(invokeResult == null) {
                        throw new SWTException(
                             "An error occurred invoking the Close method in " +
                             "WordSearchReplace.closeFile().");
              finally {
                   if(this.activeDocumentAutomation != null) {
                        this.activeDocumentAutomation.dispose();
         * Release resources.
         public void dispose() throws SWTException {
              try {
                   // Set the cleaned flag to true. This prevents the method from
                   // running again if it is called from the finalize() method
                   this.cleaned = true;
                   // From the word automation, recover the id of the Quit method
                   int[] id = this.wordAutomation.getIDsOfNames(new String[]{"Quit"});
                   // If the id of the Quit method cannot be recovered
                   // throw an exception - not much good really though.
                   if(id == null) {
                        throw new SWTException("Unable to obtain an id for the Quit " +
                             "property in WordSearchReplace.dispose().");
                   // Invoke Quit
              Variant result = this.wordAutomation.invoke(id[0]);
              // If an error occurs during the invocation, throw an exception.
              // Again though that exception is of limited value.
              if(result == null) {
                   throw new SWTException("A problem occurred trying to invoke the " +
                        "Quit method in WordSearchReplace.dispose().");
         finally {
              // Finally, dispose of the word application automation.
              this.wordAutomation.dispose();
         * The finalize() method has been over-ridden to ensure that resources
         * are correctly released if a WordSearchReplace object is created but
         * not disposed of properly before it becomes eligible for garbage
         * collection. The cleaned flag is used as acheck to ensure that the
         * dispose() method cannot be called more than once.
         public void finalize() throws Throwable {
              if(!this.cleaned) {
                   this.dispose();
         * Creates and returns a 'child' OleAutomation object. The object model
         * employed by Word, Excel and the like, arrange objects, methods and
         * properties hierarchically. To invoke a method, it is often necessary
         * to iterate through this hierarchy from parent to child and this method
         * supports that process.
         * @param automation An OleAutomation object that references the parent
         * automation.
         * @param childName An instance of the String class that encapsulates the
         * name of the child automation.
         * @throws SWTException if a problem is encountered invoking one or
         * other of the OLE methods.
         private OleAutomation getChildAutomation(OleAutomation automation,
         String childName) throws SWTException {
              // Try to recove the unique identifier for the child automation
              int[] id = automation.getIDsOfNames(new String[]{childName});
              // If the identifier cannot be found then throw an exception to
              // terminate processing.           
              if (id == null) {
                   throw new SWTException(
                        "A problem occurred trying to obtain and id for: " +
                   childName +
                   "in the getChildAutomation() method.");
              // SWT's implementation of OLE referes to all of Words objects, methods
              // and properties using the single term 'property'. The next stage
              // therefore is to recover a refence to the 'property' that relates
              // to the child automation.
              Variant pVarResult = automation.getProperty(id[0]);
              // If it is not possible to recover a 'property' for the child
              // automation, then throw an SWTException.
              if (pVarResult == null) {
                   throw new SWTException(
                        "A problem occurred trying to obtain an automation for property: " +
                   id[0] +
                   " in the getChildAutomation() method.");
              // As we are after a child automation in this instance, call the
              // getAutomation() method on the 'property'.
              return(pVarResult.getAutomation());
         * Sets the value of a property.
         * @param automation An instance of the OleAutomation class that will
         * hold a reference to the properties parent automation object
         * @param propertyName An instance of the String class that encapsulates the
         * name of the property whose value is to be set.
         * @param arguments An array of type Variant whose elements contain the
         * values that will be set for the named property.
         * @return A primitive boolean value that indicates whether or not the
         * properties value was successfully set.
         * @throws NullPointerException will be thrown if a null value is passed to
         * any of the methods three arguments.
         * @throws IllegalArgumentException will be thrown if an empty String
         * is passed to the propertyName parameter or if an empty array
         * is passed to the arguments parameter. Note, no check is made
         * on the vallues of the elements in the arguments array.
         * @throws SWTException will be thrown if a problem is encountered
         * imvoking any of the OLE methods.
         private boolean setPropertyValue(OleAutomation automation,
         String propertyName,
         Variant[] arguments) throws SWTException,
         NullPointerException,
         IllegalArgumentException {
              // Validate the various parameters
              if(automation == null) {
                   throw new NullPointerException(
                        "A null value was pas

    Alright, I'll try to keep it as simple as possible. If that's not going to work out, we can always complicate it later :)
    I suppose you had a look at the link and I assume you know about threads.
    We can easily fix this issue if you are instantiating, calling and disposing the object within one thread, e.g. you use it only in one method like
    public mySwtExecutionMethod(String fileName){
      WordSearchReplace replace = new WordSearchReplace();
      // do your replacing here
      replace.dispose();
      // no reference to replace is left so it won't escape this thread
    }Now the fix for your class becomes simple. As you remember from the link, you have to call all methods from within the UI thread. We will now create a Display every time upon instantiation of WordSearchReplace, so the current thread becomes the UI thread.
    I had a look at the constructor, and the overhead doesn't seem that bad, provided this is not a dedicated search&replace server.
    private final Display display;
    public WordSearchReplace()
         display = new Display(); // create display
         this.shell = new Shell(display);   // initialize shell with new display so this thread becomes the UI thread
         this.frame = new OleFrame(this.shell, SWT.NONE);
         this.wordSite = new OleClientSite(this.frame, SWT.NONE, WordSearchReplace.PROG_ID);
         this.wordAutomation = new OleAutomation(this.wordSite);
    }Since we always create a new Display, we should also dispose it. There is already a dispose() method, so we just have to add to it
    display.dispose();That's it!
    If you hold on longer to your reference and this isn't working for you, you'd have to do a lot more synchronizing and that the UI thread still exist as long as the reference.
    Wish you good luck

  • For Loop in Struts ?(without  Container)

    Hi all,
    Pls tell me how can v use for loop in JSP struts without using scriplets and container .
    suppose i want to display 20 times "hello world "in jsp .How can i display it using STRUTS as conventionally scriplets are not allowed in it.
    and Iterator is only for Container .
    thanx

    Hi all,
    Pls tell me how can v use for loop in JSP struts without using scriplets and container .
    suppose i want to display 20 times "hello world "in jsp .How can i display it using STRUTS as conventionally scriplets are not allowed in it.
    and Iterator is only for Container .
    thanx

  • For Loop in Struts ?(without Collections)

    Hi all,
    Pls tell me how can v use FOR LOOP IN JSP STRUTS without using scriplets and collections .
    suppose i want to display 20 times "hello world "in jsp .How can i display it using STRUTS as conventionally scriplets are not allowed in it.
    and Iterator is only for Collections .
    thanx

    TestBean.java
    * $Id: TestBean.java 54929 2004-10-16 16:38:42Z germuska $
    * Copyright 1999-2004 The Apache Software Foundation.
    * Licensed under the Apache License, Version 2.0 (the "License");
    * you may not use this file except in compliance with the License.
    * You may obtain a copy of the License at
    * http://www.apache.org/licenses/LICENSE-2.0
    * Unless required by applicable law or agreed to in writing, software
    * distributed under the License is distributed on an "AS IS" BASIS,
    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    * See the License for the specific language governing permissions and
    * limitations under the License.
    package org.apache.struts.webapp.exercise;
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Vector;
    import javax.servlet.http.HttpServletRequest;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionMapping;
    import org.apache.struts.util.LabelValueBean;
    * General purpose test bean for Struts custom tag tests.
    * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $
    public class TestBean extends ActionForm {
    // ------------------------------------------------------------- Properties
    * A collection property where the elements of the collection are
    * of type <code>LabelValueBean</code>.
    private Collection beanCollection = null;
    public Collection getBeanCollection() {
    if (beanCollection == null) {
    Vector entries = new Vector(10);
    entries.add(new LabelValueBean("Label 0", "Value 0"));
    entries.add(new LabelValueBean("Label 1", "Value 1"));
    entries.add(new LabelValueBean("Label 2", "Value 2"));
    entries.add(new LabelValueBean("Label 3", "Value 3"));
    entries.add(new LabelValueBean("Label 4", "Value 4"));
    entries.add(new LabelValueBean("Label 5", "Value 5"));
    entries.add(new LabelValueBean("Label 6", "Value 6"));
    entries.add(new LabelValueBean("Label 7", "Value 7"));
    entries.add(new LabelValueBean("Label 8", "Value 8"));
    entries.add(new LabelValueBean("Label 9", "Value 9"));
    beanCollection = entries;
    return (beanCollection);
    public void setBeanCollection(Collection beanCollection) {
    this.beanCollection = beanCollection;
    * A multiple-String SELECT element using a bean collection.
    private String[] beanCollectionSelect = { "Value 1", "Value 3",
    "Value 5" };
    public String[] getBeanCollectionSelect() {
    return (this.beanCollectionSelect);
    public void setBeanCollectionSelect(String beanCollectionSelect[]) {
    this.beanCollectionSelect = beanCollectionSelect;
    * A boolean property whose initial value is true.
    private boolean booleanProperty = true;
    public boolean getBooleanProperty() {
    return (booleanProperty);
    public void setBooleanProperty(boolean booleanProperty) {
    this.booleanProperty = booleanProperty;
    * A multiple-String SELECT element using a collection.
    private String[] collectionSelect = { "Value 2", "Value 4",
    "Value 6" };
    public String[] getCollectionSelect() {
    return (this.collectionSelect);
    public void setCollectionSelect(String collectionSelect[]) {
    this.collectionSelect = collectionSelect;
    * A double property.
    private double doubleProperty = 321.0;
    public double getDoubleProperty() {
    return (this.doubleProperty);
    public void setDoubleProperty(double doubleProperty) {
    this.doubleProperty = doubleProperty;
    * A boolean property whose initial value is false
    private boolean falseProperty = false;
    public boolean getFalseProperty() {
    return (falseProperty);
    public void setFalseProperty(boolean falseProperty) {
    this.falseProperty = falseProperty;
    * A float property.
    private float floatProperty = (float) 123.0;
    public float getFloatProperty() {
    return (this.floatProperty);
    public void setFloatProperty(float floatProperty) {
    this.floatProperty = floatProperty;
    * Integer arrays that are accessed as an array as well as indexed.
    private int intArray[] = { 0, 10, 20, 30, 40 };
    public int[] getIntArray() {
    return (this.intArray);
    public void setIntArray(int intArray[]) {
    this.intArray = intArray;
    private int intIndexed[] = { 0, 10, 20, 30, 40 };
    public int getIntIndexed(int index) {
    return (intIndexed[index]);
    public void setIntIndexed(int index, int value) {
    intIndexed[index] = value;
    private int intMultibox[] = new int[0];
    public int[] getIntMultibox() {
    return (this.intMultibox);
    public void setIntMultibox(int intMultibox[]) {
    this.intMultibox = intMultibox;
    * An integer property.
    private int intProperty = 123;
    public int getIntProperty() {
    return (this.intProperty);
    public void setIntProperty(int intProperty) {
    this.intProperty = intProperty;
    * A long property.
    private long longProperty = 321;
    public long getLongProperty() {
    return (this.longProperty);
    public void setLongProperty(long longProperty) {
    this.longProperty = longProperty;
    * A multiple-String SELECT element.
    private String[] multipleSelect = { "Multiple 3", "Multiple 5",
    "Multiple 7" };
    public String[] getMultipleSelect() {
    return (this.multipleSelect);
    public void setMultipleSelect(String multipleSelect[]) {
    this.multipleSelect = multipleSelect;
    * A nested reference to another test bean (populated as needed).
    private TestBean nested = null;
    public TestBean getNested() {
    if (nested == null)
    nested = new TestBean();
    return (nested);
    * A String property with an initial value of null.
    private String nullProperty = null;
    public String getNullProperty() {
    return (this.nullProperty);
    public void setNullProperty(String nullProperty) {
    this.nullProperty = nullProperty;
    * A short property.
    private short shortProperty = (short) 987;
    public short getShortProperty() {
    return (this.shortProperty);
    public void setShortProperty(short shortProperty) {
    this.shortProperty = shortProperty;
    * A single-String value for a SELECT element.
    private String singleSelect = "Single 5";
    public String getSingleSelect() {
    return (this.singleSelect);
    public void setSingleSelect(String singleSelect) {
    this.singleSelect = singleSelect;
    * String arrays that are accessed as an array as well as indexed.
    private String stringArray[] =
    { "String 0", "String 1", "String 2", "String 3", "String 4" };
    public String[] getStringArray() {
    return (this.stringArray);
    public void setStringArray(String stringArray[]) {
    this.stringArray = stringArray;
    private String stringIndexed[] =
    { "String 0", "String 1", "String 2", "String 3", "String 4" };
    public String getStringIndexed(int index) {
    return (stringIndexed[index]);
    public void setStringIndexed(int index, String value) {
    stringIndexed[index] = value;
    private String stringMultibox[] = new String[0];
    public String[] getStringMultibox() {
    return (this.stringMultibox);
    public void setStringMultibox(String stringMultibox[]) {
    this.stringMultibox = stringMultibox;
    * A String property.
    private String stringProperty = "This is a string";
    public String getStringProperty() {
    return (this.stringProperty);
    public void setStringProperty(String stringProperty) {
    this.stringProperty = stringProperty;
    * An empty String property.
    private String emptyStringProperty = "";
    public String getEmptyStringProperty() {
    return (this.emptyStringProperty);
    public void setEmptyStringProperty(String emptyStringProperty) {
    this.emptyStringProperty = emptyStringProperty;
    * A single-String value for a SELECT element based on resource strings.
    private String resourcesSelect = "Resources 2";
    public String getResourcesSelect() {
    return (this.resourcesSelect);
    public void setResourcesSelect(String resourcesSelect) {
    this.resourcesSelect = resourcesSelect;
    * A property that allows a null value but is still used in a SELECT.
    private String withNulls = null;
    public String getWithNulls() {
    return (this.withNulls);
    public void setWithNulls(String withNulls) {
    this.withNulls = withNulls;
    * A List property.
    private List listProperty = null;
    public List getListProperty() {
    if (listProperty == null) {
    listProperty = new ArrayList();
    listProperty.add("dummy");
    return listProperty;
    public void setListProperty(List listProperty) {
    this.listProperty = listProperty;
    * An empty List property.
    private List emptyListProperty = null;
    public List getEmptyListProperty() {
    if (emptyListProperty == null) {
    emptyListProperty = new ArrayList();
    return emptyListProperty;
    public void setEmptyListProperty(List emptyListProperty) {
    this.emptyListProperty = emptyListProperty;
    * A Map property.
    private Map mapProperty = null;
    public Map getMapProperty() {
    if (mapProperty == null) {
    mapProperty = new HashMap();
    mapProperty.put("dummy", "dummy");
    return mapProperty;
    public void setMapProperty(Map mapProperty) {
    this.mapProperty = mapProperty;
    * An empty Map property.
    private Map emptyMapProperty = null;
    public Map getEmptyMapProperty() {
    if (emptyMapProperty == null) {
    emptyMapProperty = new HashMap();
    return emptyMapProperty;
    public void setEmptyMapProperty(Map emptyMapProperty) {
    this.emptyMapProperty = emptyMapProperty;
    // --------------------------------------------------------- Public Methods
    * Reset the properties that will be received as input.
    public void reset(ActionMapping mapping, HttpServletRequest request) {
    booleanProperty = false;
    collectionSelect = new String[0];
    intMultibox = new int[0];
    multipleSelect = new String[0];
    stringMultibox = new String[0];
    if (nested != null)
    nested.reset(mapping, request);
    }

  • Error in  struts with collection classes

    Hi All,
    I have tried to list all the employee through dabase search i have created with strus logic tag in search.jsp page
    as following
    <bean:size id="size" name="searchForm" property="results"/>
    <logic:equal name="size" value="0">
    <center><font color="red"><b>No Employees Found</b></font></center>
    </logic:equal>
    <logic:greaterThan name="size" value="0">
    <table border="1">
    <tr>
    <th>Name</th>
    <th>Social Security Number</th>
    </tr>
    <logic:iterate id="result" name="searchForm" property="results">
    <tr><td><bean:write name="result" property="name"/></td>
    <td><bean:write name="result" property="ssNum"/></td>
    </tr>
    </logic:iterate>
    </table>
    </logic:greaterThan>
    </logic:present>
    2. The following class shows ActionServlet as SearchAction.java class
    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,HttpServletResponse response)
    throws Exception
    EmployeeSearchService service = new EmployeeSearchService();
    List results=new ArrayList();;
    SearchForm searchForm = (SearchForm) form;
    // Perform employee search based on what criteria was entered.
    String name = searchForm.getName();
    if (name != null && name.trim().length() > 0)
    results = service.searchByName(name);
    /* else {
    results = service.searchBySsNum(searchForm.getSsNum().trim());
    // Place search results in SearchForm for access by JSP.
    searchForm.setResults(results);
    // Forward control to this Action's input page.
    return mapping.getInputForward();
    3. The following class created for search the employee as EmployeeSearchService.java
    Note: This file will implement EmployeeDB.java for database connections and also the values are return using Employee.java as for get and set method of name and id..
    EmployeeSearchService.java
    public List searchByName(String name)
    // List returnList=new ArrayList();
    List results=new ArrayList();
    EmployeeDB em=new EmployeeDB();
    results=em.searchName(name);
    ListIterator langIt=results.listIterator();
    while(langIt.hasNext())
    Employee emp=(Employee) langIt.next();
    String name2 = emp.getName();
    String SSNo=emp.getSsNum();
    System.out.println("Emp Name:"+ name2);
    results.add(name2);
    results.add(SSNo);
    4. EmployeeDB.java contain the following code..
    public class EmployeeDB extends AbstractDAO
    public List searchName(String name1)
    {      //External Interface
    List resultList = new ArrayList();
    ResultSet resultSet = null;
    Statement aStmt2 = null;
    String url="jdbc:odbc:test";
    String uname="root";
    String pwd="root";
    String name="";
    try {
    Connection con=getConnection();
    aStmt2 = con.createStatement();
    String query2 = "SELECT SSNO,NAME FROM EMPLOYEE WHERE NAME ='"+ name1 +"'";
    cat.debug(query2);
    resultSet = aStmt2.executeQuery(query2);
    while(resultSet.next()){
    Employee tvo = new Employee();
    name = resultSet.getString("NAME");
    String SsNum1 = resultSet.getString("SSNO");
    tvo.setName(name);
    tvo.setSsNum(SsNum1);
    resultList.add(tvo);
    catch (Exception e) {
    System.out.println( e);
    e.printStackTrace();
    return resultList;
    My Problem is all the classes are compiled and excute and validation work fine but while the name of employee entered that if name is available in DB table which reply the following error message as,
    javax.servlet.ServletException
         org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:516)
         org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:423)
         org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
         org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
         org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:415)
         javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
         javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
         org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)
    root cause
    java.util.ConcurrentModificationException
         java.util.AbstractList$Itr.checkForComodification(AbstractList.java:449)
         java.util.AbstractList$Itr.next(AbstractList.java:420)
         com.dao.vertex.EmployeeSearchService.searchByName(EmployeeSearchService.java:77)
         com.dao.vertex.SearchAction.execute(SearchAction.java:36)
         org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
         org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
         org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
         org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:415)
         javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
         javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
         org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)
    note The full stack trace of the root cause is available in the Apache Tomcat/5.5.9 logs
    Plz reply how to solve send correct code to send data to values of iterate bean.... which line of code i need to modify...
    Thanks.

    So here is what you are doing:
    ArrayList results = //get employees from database
    ListIterator langIt = results.listIterator();
    while (langIt.hasNext()) {
      Employee emp = langIt.next();
      String name2 = emp.getName();
      String SSNo = emp.getSSNum();
      results.add(name2);
      results.add(SSNo);
    }So you get a list or Employee objects, then you get an iterator over the list. For each Employee in the list you add the name and SSNo as Strings back to the same list. From the API for ConcurrentModificationException the exception can be thrown when you modify a collection while iterating over the collection - which is precisely what you are doing.
    The ListIterator interface allows you to modify the list through its own methods. Try using:
      langIt.add(name2);
      langIt.add(SSNo);instead.
    Why are you taking the name and SSNo out of the Employee object and placing them back in the same List anyway? That makes no sense to me.

  • Problem with a link into an iterator

    Hello,
    I have an iterator who runs a group of items and show information of them in a jsf. At each iteration it's written a link
    <af:commandImageLink id="cil1" icon="/images/flecha_Arriba.gif"
    disabledIcon="/images/flecha_Arriba_des.gif"
    immediate="true" partialSubmit="true"
    action="subir"
    actionListener="#{bindings.setCurrentRowWithKey.execute}"/>
    but when I runs the page, the link don't work.
    But, I have noticed that if I write the code above out of the iterator, the link works perfectly!!. It can't set the current row but the code is executed.
    Thanks in advance!
    Marcos

    You're right, I'm sorry.
    I'll try to explain better my case.
    I'm developing an ADF aplication whit JDeveloper 11.1.2.2.0 (jvm 1.6.0_33 64-bits)
    Weblogic 11g with jvm 1.7.0 64-Bits.
    I need to show a group of items, as a table, but visually different. Therefore, I created a table from Data controls. Next, I delete the table from source code and added the next code.
    <af:iterator id="i4" var="iterRuta" varStatus="stRutas"
                    value="#{bindings.RutaClienteDia1.collectionModel}" rows="250">
         <af:panelGroupLayout id="pb1" layout="horizontal"
                                   rendered="#{iterRuta.Dia eq iterDias.Dia}">
              <af:panelGroupLayout id="pgl10"
                                        inlineStyle="width:100px; height:20px;"
                                        layout="horizontal">
                   <af:outputLabel value="#{iterRuta.Cliente}" id="ol3"
                                       inlineStyle="color:Black;"/>
              </af:panelGroupLayout>
              <af:panelGroupLayout id="pgl11" inlineStyle="width:350px;"
                                        layout="horizontal">
                   <af:outputLabel value="#{iterRuta.FirstName}" id="ol2"
                                       inlineStyle="color:Black;"/>
              </af:panelGroupLayout>
              <af:panelGroupLayout id="pgl12" layout="horizontal"
                                        inlineStyle="width:100px;" halign="center"
                                        valign="middle">
                   <af:outputLabel value="#{iterRuta.Orden}" id="ol4"
                                       inlineStyle="color:Black;"/>
              </af:panelGroupLayout>
              <af:panelGroupLayout id="pgl13" layout="horizontal"
                                        inlineStyle="width:50px;" halign="center"
                                        valign="middle">
                   <af:outputLabel value="#{iterRuta.Estado}" id="ol1"
                                       inlineStyle="color:Black;"/>
              </af:panelGroupLayout>
              <af:panelGroupLayout id="pgl15" layout="horizontal"
                                        inlineStyle="width:40px;">
                   <af:commandImageLink id="cil1" icon="/images/flecha_Arriba.gif"
                                             disabledIcon="/images/flecha_Arriba_des.gif"
                                             immediate="true" partialSubmit="true"
                                             action="subir"
                                             actionListener="#{bindings.setCurrentRowWithKey.execute}"/>
                   <af:spacer width="10" height="10" id="s4"/>
                   <af:commandImageLink id="cil2" icon="/images/flecha_Abajo.gif"
                                             action="bajar"
                                             actionListener="#{bindings.setCurrentRowWithKey.execute}"
                                             immediate="true"/>
              </af:panelGroupLayout>
              <af:panelGroupLayout id="pgl17" layout="horizontal"
                                        inlineStyle="width:40px;" halign="right">
                   <af:commandImageLink id="cil3" icon="/images/delete.gif"
                                             actionListener="#{bindings.setCurrentRowWithKey.execute}"
                                             disabled="#{!bindings.Delete.enabled}"
                                             action="deleteClienteDia"/>
              </af:panelGroupLayout>
         </af:panelGroupLayout>
         </af:iterator>In this code, there are three links in each row. One to go up (subir), other to go down (bajar) and the last to delete de row. All the links are similars. Each one have an action defined in their task flow (this action was implemented in the VO implementation an was published in the VO)
    Also, each link have an ActionListener "#{bindings.setCurrentRowWithKey.execute}" with the param: rowKey: "#{iterRuta.rowKeyStr}"
    With this configuration, the links doesn't work, but if I take out the code of the iterator, the links works fine (obviusly don't set fine the current row, but the code is executed.
    I don't know what can I do.
    Thanks and if you need more details, tell me please.
    Marcos.

  • Loading Collections in to DropDownList box using Struts with bean

    Hi folks,
    I am very new to struts.
    I am developing one small web application using struts. I has developed Bussiness Logic, i need to use properly in struts.
    ManufacturerList.java is a Bussiness Logic class using to load all manufacturer from the database. It using by the collection LinkedHashMap.
    I need to use this BL in my struts application.
    GOAL: In sturts application i need to add the car details, one of the property for car is manufacturer.
    When creating the car, it should display all the manufacturer in the new student form.
    Please explain how to create with struts.
    Some of the Code i developed
    {color:#ff0000}<html:form action="/Car?op=saveCar">
    <html:errors/>
    <html:hidden property="op" value="saveCar"/>
    <html:hidden property="carCode"/>
    Car Name <html:text property="model"></html:text> <br>
    Manufacturer
    <!-- Defining the bean for manufacturer list getting from the request-->
    <bean:define id="mfrList" name="ManufacturerList" property="manufacturers"
    scope="request"
    type="java.util.Collection">
    </bean:define>
    <br>
    Manufacturer Year <html:text property="yearOfManufacture"></html:text><br>
    Date of Purchase <html:text property="dateOfPurchase"></html:text> <br>
    <html:submit value="Ok" />
    </html:form>{color}
    This is code is not working properly.... Please explain

    Hi i did like this
    {color:#0000ff}<bean:define id="mfrList" name="ManufacturerList" {color}
    {color:#0000ff}scope="request" {color}
    {color:#0000ff}type="com.icalib.trafficSimulator.ManufacturerList">{color}
    {color:#0000ff}</bean:define>{color}
    {color:#0000ff}<html:select property="make">{color}
    {color:#0000ff}<html:optionsCollection name="mfrList" label="mfrName" value="mfrCode"/>{color}
    {color:#0000ff}</html:select>{color}
    But the error is comming like thisjavax.servlet.ServletException: Cannot create iterator for 1:Honda
    2:Maruti
    3:Hyundai
    4:Toyota
    5:Accord
    6:Test_mfr
    7:test_mfr2
    8:456
    9:again
    10:123
    11:again1
    What to give in the label and value in the optionsCollection                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       

  • How to list an array of objects using struts in jsp and ActionForm

    I am using the struts ActionForm and need to know how to display an Array of objects. I am assuming it would look like this in the ActionForm:
    private AddRmvParts addRmv[];
    But I am not sure how the getter and setter in the ActionForm should look. Should it be a Collection or an Iterator?
    I am thinking I need to use an iterator in the jsp page to display it.
    I am also wondering if the AddRmvParts class I have can be the same class that gets populated by the retrieval of data from the database. This class has 10 fields that need to display on the jsp page in 1 row and then multiple rows of these 10 fields.
    Thanks.

    Most probably the easiest way to make it accessible in your page is as a collection.
    ie
    public Collection getAddRmvParts()
    You can use the <logic:iterate> or a <c:forEach>(JSTL) tag to loop through the collection
    As long as the individual items in the collection provide get/set methods you can access them with the dot syntax:
    Example using JSTL:
    <c:forEach var="addRmvPart" items="${addRmvParts}">
      <c:out value="${addRmvPart.id} ${addRmvPart.name} ${addRmvPart.description}"/>
    </c:forEach>

Maybe you are looking for