struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From fusillator <fusilla...@gmail.com>
Subject Re: iterable tag
Date Sat, 12 Jan 2013 11:06:49 GMT
Sorry for my misunderstanding, I changed the code of the wiki tutorial 
about wildcard

These is the view:

<%@ page language="java" contentType="text/html; charset=UTF-8"
     pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>List of people</title>
</head>
<body>
<h3>List of persons:</h3>
<s:if test="people.isEmpty">
<ol>
<s:iterator value="people">
<li>
<s:property value="firstName" /> <s:property value="lastName" />
<s:url action="removePerson" var="urlremove"><s:param name="code" 
value="id" /></s:url>
<s:url action="editPerson" var="urledit"><s:param name="code" value="id" 
/></s:url>
<s:a href="%{urledit}">Edit</s:a>
<s:a href="%{urlremove}">Remove</s:a>
</li>
</s:iterator>
</ol>
</s:if>
<s:else>
No person inserted
</s:else>
<s:url action="editPerson" var="urlnew" />
<s:a href="%{urlnew}">Insert a new person</s:a>
</body>
</html>

and this is the action class:

package org.apache.struts.tutorial.wildcard.action;

import java.util.Collection;
//import java.util.List;
import org.apache.struts.tutorial.wildcard.service.PersonService;
import org.apache.struts.tutorial.wildcard.model.Person;
import org.apache.log4j.Logger;
import com.opensymphony.xwork2.ActionSupport;

public class PersonAction extends ActionSupport {

     private static final long serialVersionUID = 1L;

     private static final Logger logger = 
Logger.getLogger(PersonAction.class.getName());

     private Collection<Person> people=PersonService.getPeople();
     private int code=-1; //parametro passato da view
     private Person personBean;
     private PersonService personService=new PersonService();

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

     public String edit(){
         setPersonBean(personService.getPerson(code));
         return INPUT;
     }

     public String save(){
         personService.savePerson(getPersonBean());
         return SUCCESS;
     }

     public String remove(){
         personService.removePerson(code);
         return SUCCESS;
     }

     public Collection<Person> getPeople() {
         return people;
     }

     public void setPeople(Collection<Person> people) {
         this.people = people;
     }

     public int getCode() {
         return code;
     }

     public void setCode(int code) {
         this.code = code;
     }

     public Person getPersonBean() {
         return personBean;
     }

     public void setPersonBean(Person personBean) {
         this.personBean = personBean;
     }

}

and my modified PersonService class:

package org.apache.struts.tutorial.wildcard.service;

//import java.util.ArrayList;
import java.util.Collection;
//import java.util.List;
import java.util.SortedMap;
import java.util.TreeMap;

import org.apache.log4j.Logger;
import org.apache.struts.tutorial.wildcard.model.Person;

public class PersonService {

     private static final Logger logger = 
Logger.getLogger(PersonService.class.getName());

     //static private List<Person> peopleList=new ArrayList<Person>();
     static private SortedMap<Integer,Person> people=new 
TreeMap<Integer,Person>();
     static {
         people.put(new Integer(1), new Person(1,"Paolino","Paperino"));
         people.put(new Integer(2), new Person(2,"Paperon","De Paperoni"));
         people.put(new Integer(3), new Person(3,"Archimede","Pitagorica"));
         //generateList();
     }
     /*
     static void generateList(){
         peopleList.clear();
         for (Integer i : people.keySet()){
             peopleList.add(people.get(i));
         }
     }
     */
     static public Collection<Person> getPeople(){
         logger.debug(people.values());
         logger.debug(people.values().getClass().toString());
         return people.values();
     }

     public Person getPerson(int code){
         if (code<0)
             return new Person(-1,"","");
         else
             return people.get(new Integer(code));
     }

     public void savePerson(Person person){
         logger.debug(person);
         if (person.getId()>=0){
             people.put(new Integer(person.getId()),person);
         } else {
             int id = people.isEmpty() ? 1 : people.lastKey().intValue()+1;
             person.setId(id);
             people.put(new Integer(id),person);
         }
         //generateList();
     }

     public void removePerson(int code){
         people.remove(new Integer(code));
         //generateList();
     }

}


The mapping definitions are:

<action name="*Person" 
class="org.apache.struts.tutorial.wildcard.action.PersonAction" 
method="{1}">
             <result name="success">/view.jsp</result>
             <result name="input">/input.jsp</result>
</action>

The model Person is a pojo with 3 attributes: firstName, lastName, id

thanks for the support

Il 12/01/2013 11:50, Umesh Awasthi ha scritto:
> I believe what *Chris* has asked is to copy the code from your JSP page
>
> i believe you must be using <s:iterator> tag in your JSP page to iterate
> some list
> so please copy that code from your JSP and provide here
>
>
>
> On Sat, Jan 12, 2013 at 4:16 PM, fusillator <fusillator@gmail.com> wrote:
>
>> Hi Chris, not really sure how to find that code... Anyway this has been my
>> steps:
>> $ for lib in /opt/struts-2.3.7/lib/* ; do jar tvf $lib | grep tld && echo
>> $lib; done
>>    3349 Wed Aug 10 12:51:32 CEST 2005 META-INF/sitemesh-decorator.**tld
>>    3013 Sat May 15 11:55:14 CEST 2004 META-INF/sitemesh-page.tld
>> /opt/struts-2.3.7/lib/**sitemesh-2.4.2.jar
>> 346038 Tue Nov 06 08:13:06 CET 2012 META-INF/struts-tags.tld
>> /opt/struts-2.3.7/lib/struts2-**core-2.3.7.jar
>> 136496 Tue Nov 06 08:24:22 CET 2012 META-INF/struts-dojo-tags.tld
>> /opt/struts-2.3.7/lib/struts2-**dojo-plugin-2.3.7.jar
>>     752 Tue Nov 06 08:27:06 CET 2012 META-INF/tags/JsonPlugin.tld
>> /opt/struts-2.3.7/lib/struts2-**json-plugin-2.3.7.jar
>>       0 Tue May 13 21:39:54 CEST 2008 META-INF/tld/
>>   27808 Tue May 13 21:39:54 CEST 2008 META-INF/tld/tiles-jsp.tld
>> /opt/struts-2.3.7/lib/tiles-**jsp-2.0.6.jar
>>
>> $ jar xvf /opt/struts-2.3.7/lib/struts2-**core-2.3.7.jar
>> META-INF/struts-tags.tld
>>   \decompresso: META-INF/struts-tags.tld
>>
>> $ grep -n "<name>iterator</name>" META-INF/struts-tags.tld
>> 4881:    <name>iterator</name>
>>
>> and the tag definition in the tld file is:
>>
>> <tag>
>>      <description><![CDATA[Iterate over a iterable value]]></description>
>>      <name>iterator</name>
>> <tag-class>org.apache.struts2.**views.jsp.IteratorTag</tag-**class>
>>      <body-content>JSP</body-**content>
>>      <!-- here a lot of not interesting attributes-->
>> </tag>
>>
>> $ find src -name IteratorTag.java
>> src/core/src/main/java/org/**apache/struts2/views/jsp/**IteratorTag.java
>>
>> $ cat src/core/src/main/java/org/**apache/struts2/views/jsp/**
>> IteratorTag.java
>> /*
>>   * $Id: IteratorTag.java 741179 2009-02-05 16:55:14Z musachy $
>>   *
>>   * Licensed to the Apache Software Foundation (ASF) under one
>>   * or more contributor license agreements.  See the NOTICE file
>>   * distributed with this work for additional information
>>   * regarding copyright ownership.  The ASF licenses this file
>>   * to you 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<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.struts2.views.jsp;
>>
>> import javax.servlet.http.**HttpServletRequest;
>> import javax.servlet.http.**HttpServletResponse;
>> import javax.servlet.jsp.**JspException;
>>
>> import org.apache.struts2.components.**Component;
>> import org.apache.struts2.components.**IteratorComponent;
>>
>> import com.opensymphony.xwork2.util.**ValueStack;
>>
>> /**
>>   * @see IteratorComponent
>>   */
>> public class IteratorTag extends ContextBeanTag {
>>
>>      private static final long serialVersionUID = -1827978135193581901L;
>>
>>      protected String statusAttr;
>>      protected String value;
>>      protected String begin;
>>      protected String end;
>>      protected String step;
>>
>>      public Component getBean(ValueStack stack, HttpServletRequest req,
>> HttpServletResponse res) {
>>          return new IteratorComponent(stack);
>>      }
>>
>>      protected void populateParams() {
>>          super.populateParams();
>>
>>          IteratorComponent tag = (IteratorComponent) getComponent();
>>          tag.setStatus(statusAttr);
>>          tag.setValue(value);
>>          tag.setBegin(begin);
>>          tag.setEnd(end);
>>          tag.setStep(step);
>>      }
>>
>>      public void setStatus(String status) {
>>          this.statusAttr = status;
>>      }
>>
>>      public void setValue(String value) {
>>          this.value = value;
>>      }
>>
>>      public void setBegin(String begin) {
>>          this.begin = begin;
>>      }
>>
>>      public void setEnd(String end) {
>>          this.end = end;
>>      }
>>
>>      public void setStep(String step) {
>>          this.step = step;
>>      }
>>
>>      public int doEndTag() throws JspException {
>>          component = null;
>>          return EVAL_PAGE;
>>      }
>>
>>      public int doAfterBody() throws JspException {
>>          boolean again = component.end(pageContext.**getOut(), getBody());
>>
>>          if (again) {
>>              return EVAL_BODY_AGAIN;
>>          } else {
>>              if (bodyContent != null) {
>>                  try {
>> bodyContent.writeOut(**bodyContent.**getEnclosingWriter());
>>                  } catch (Exception e) {
>>                      throw new JspException(e.getMessage());
>>                  }
>>              }
>>              return SKIP_BODY;
>>          }
>>      }
>>
>> }
>>
>> Thanks a lot for your help.
>>
>>
>>
>>
>>
>> Il 11/01/2013 20:21, Chris Pratt ha scritto:
>>
>>> Can you cut and paste your <s:iterator> code into the email so we can see?
>>>     (*Chris*)
>>>
>>>
>>> On Fri, Jan 11, 2013 at 11:12 AM, fusillator <fusillator@gmail.com>
>>> wrote:
>>>
>>>   Hi all, I'm new to struts2/java matters, so be sympathetic please.
>>>> I've a question about <s:iterator> tag
>>>>
>>>> I recently used it to loop on a Iterable collection of type
>>>> java.util.TreeMap$Values retrieved by the method
>>>> java.util.TreeMap.values()
>>>>
>>>> getting the following cast exception:
>>>>
>>>> 2013-01-11 18:45:00,520 DEBUG org.apache.struts.tutorial.**
>>>> wildcard.service.****PersonService.getPeople:33 [Person [1: Paolino
>>>> Paperino], Person [2: Paperon De Paperoni], Person [3: Archimede
>>>> Pitagorica]]
>>>> 2013-01-11 18:45:00,523 DEBUG org.apache.struts.tutorial.**
>>>> wildcard.service.****PersonService.getPeople:34 class
>>>> java.util.TreeMap$Values
>>>> 2013-01-11 18:45:00,523 DEBUG org.apache.struts.tutorial.**
>>>> wildcard.service.****PersonService.getPeople:34 class
>>>> java.util.TreeMap$Values
>>>> gen 11, 2013 6:45:01 PM org.apache.jasper.compiler.****TldLocationsCache
>>>> tldScanJar
>>>> WARNING: Caught an exception while evaluating expression 'people.isEmpty'
>>>> against value stack
>>>> java.lang.ClassCastException: java.util.TreeMap$Values cannot be cast to
>>>> java.util.Set
>>>>           at ognl.SetPropertyAccessor.****getProperty(**
>>>> SetPropertyAccessor.java:47)
>>>>           at com.opensymphony.xwork2.ognl.****accessor.**
>>>> XWorkCollectionPropertyAccesso****r.getProperty(**
>>>> XWorkCollectionPropertyAccesso****r.java:93)
>>>>           at ognl.OgnlRuntime.getProperty(****OgnlRuntime.java:2300)
>>>>
>>>> The used variable is reported by log4j.
>>>> Is there any restriction on the iterator tags?
>>>> Could someone suggest me a tutorial/howto about ognl/value stack?
>>>>
>>>> Best regards
>>>>
>>>>
>>>>
>>>> ------------------------------****----------------------------**
>>>> --**---------
>>>> To unsubscribe, e-mail: user-unsubscribe@struts.**apac**he.org<http://apache.org>
>>>> <user-unsubscribe@**struts.apache.org<user-unsubscribe@struts.apache.org>
>>>> For additional commands, e-mail: user-help@struts.apache.org
>>>>
>>>>
>>>>
>> ------------------------------**------------------------------**---------
>> To unsubscribe, e-mail: user-unsubscribe@struts.**apache.org<user-unsubscribe@struts.apache.org>
>> For additional commands, e-mail: user-help@struts.apache.org
>>
>>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Mime
View raw message