【问题标题】:How to send list from action class to jsp page?如何将列表从动作类发送到jsp页面?
【发布时间】:2014-08-29 00:21:05
【问题描述】:

我正在使用 struts 和 hibernate 开发应用程序。在这种情况下,我想在动作类的 jsp 页面中显示结果。从动作类列表存储信息和该列表应打印在 jsp 页面上。但是我只有一个 pojo 类,我的动作类和休眠映射是在同一个类中完成的。

index.jsp ->MusicAction->a.jsp

package action;
import java.util.Iterator;
import java.util.List;
import java.util.Map;


import com.opensymphony.xwork2.ActionSupport;
@Action(value="Music")
@javax.persistence.Entity
@Table(name="item")
@Results({
    @Result(name="success",location="a.jsp"),
    @Result(name="error",location="b.jsp")
 })
public class MusicAction extends ActionSupport 
{

@Id
private int item_no;
private String item_Name;
private String item_type;
private float item_price;

public int getItem_no() {
    return item_no;
}
public void setItem_no(int item_no) {
    this.item_no = item_no;
}
public String getItem_Name() {
    return item_Name;
}
public void setItem_Name(String item_Name) {
    this.item_Name = item_Name;
}
public String getItem_type() {
    return item_type;
}
public void setItem_type(String item_type) {
    this.item_type = item_type;
}
public float getItem_price() {
    return item_price;
}
public void setItem_price(float item_price) {
    this.item_price = item_price;
}




@Override
public String execute() throws Exception {
    List l =getItem();

    System.out.println("in execute"+l);
    return "success";

}


public List getItem()
{   
    System.out.println("yah i m in getItem");

    Session session=new AnnotationConfiguration().configure("hibernate.cfg.xml").buildSessionFactory().openSession();

    Transaction t = session.beginTransaction();


    MusicAction m = new MusicAction();

    //System.out.println("configured");

    Query query = session.createQuery("from MusicAction");

    java.util.List list = query.list();
    Iterator it=list.iterator();
    while(it.hasNext())
    {
        m=(MusicAction)it.next();

        System.out.println(m.getItem_no()+"| "+m.getItem_Name()+"\t|"+m.getItem_type()+"\t"+m.getItem_price());
    }
    t.commit();
    session.close();


    return list;
   }

   }

如何在 a.jsp 中访问该列表?

【问题讨论】:

  • 你有什么问题?
  • 嗨,MusicAction 类中的朋友,有一个包含值的列表。 & 如果 execute() 方法返回 true,则该值应显示在 jsp 页面上。
  • 这不是问题,因为execute方法永远不会返回true。并且您没有 JSP 页面。
  • 我想你没见过,我已经给出了路径如果execute()方法返回成功,控制转到a.jsp页面。
  • 一个 Struts 动作不应该是一个实体,反之亦然。这是没有意义的。一个 Struts 动作应该获取和保存实体,并使视图可以访问它们。每次调用您的操作时重新配置 Hibernate 也是您真正不应该做的事情。会话工厂必须在整个应用程序期间创建一次,并且只创建一次。

标签: hibernate jsp struts2


【解决方案1】:

你被解释了确切的错误。所以,试试这个,

MusicAction.class

    public class MusicAction extends ActionSupport 
   {
    private List<Item> item=new ArrayList<Item>();//setter method.
    @Override
    public String execute() throws Exception {
      System.out.println("in execute"+item.size());
       return "success";
    }
    public List<Item> getItem(){ try{
            System.out.println("yah i m in getItem");
            Session session=new AnnotationConfiguration().configure("hibernate.cfg.xml").buildSessionFactory().openSession();
            Transaction t = session.beginTransaction();
            MusicAction m = new MusicAction();
            Query query = session.createQuery("from MusicAction");
            item = (List<Item>)query.list();
            t.commit();
            session.close();}catch(Exception e){}
         return item;}
    }

a.jsp

  <%@ taglib prefix="s" uri="/struts-tags" %>
  <s:iterator value="item"> 
      <s:property value="item_no" />
      <s:property value="item_Name" />
      <s:property value="item_type" />
      <s:property value="item_price" />
  </s:iterator>

【讨论】:

  • 谢谢,但它会引发另一个异常,例如 org.hibernate.MappingException:无法确定类型:java.util.List,列:[org.hibernate.mapping.Column(list)]
猜你喜欢
  • 2018-03-01
  • 1970-01-01
  • 2013-11-30
  • 1970-01-01
  • 1970-01-01
  • 2018-08-20
  • 1970-01-01
  • 2012-01-09
  • 1970-01-01
相关资源
最近更新 更多