使用 Struts 2 和 Hibernate 从下拉列表 (<s:select>) 中的数据库中检索值

Retrieve value from database in drop-down(<s:select>) using Struts 2 and Hibernate

我想使用下拉菜单并从数据库中获取下拉菜单中的值,下拉菜单应包含用于保存目的的公司代码和用于显示目的的公司描述。

下面是我的代码:

豆子Class:

package com.ims.master.company.bean;

public class CompanyBean {

        private String id;
        private String cmpCode;
        private String cmpDes;
        private String cmpStatus;
        private String cmpCreated;

        public CompanyBean(String cmpCode, String cmpDes) {
            super();
            this.cmpCode = cmpCode;
            this.cmpDes = cmpDes;
        }

        public String getId() {
            return id;
        }
        public void setId(String id) {
            this.id = id;
        }
        public String getCmpCreated() {
            return cmpCreated;
        }
        public void setCmpCreated(String cmpCreated) {
            this.cmpCreated = cmpCreated;
        }
        public String getCmpCode() {
            return cmpCode;
        }
        public void setCmpCode(String cmpCode) {
            this.cmpCode = cmpCode;
        }
        public String getCmpDes() {
            return cmpDes;
        }
        public void setCmpDes(String cmpDes) {
            this.cmpDes = cmpDes;
        }
        public String getCmpStatus() {
            return cmpStatus;
        }
        public void setCmpStatus(String cmpStatus) {
            this.cmpStatus = cmpStatus;
        }
}

DAO class:

package com.ims.master.company.DAO;

import java.util.ArrayList;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import com.ims.hibernate.HibernateUtil;
import com.ims.master.company.bean.CompanyBean;


public class CompanyDAO {

    SessionFactory factory = HibernateUtil.getFactory();
    Session session = factory.openSession();
    ArrayList<CompanyBean> recList = new ArrayList<CompanyBean>();

    @SuppressWarnings("unchecked")
    public ArrayList<CompanyBean> retrieveCmpCode()
    {
        System.out.println("=====inside DAO======");
        Query query = session.createQuery("select b.cmpCode,b.cmpDes from CompanyBean b where b.cmpStatus=:val");
        query.setParameter("val", "Y");
        recList = (ArrayList<CompanyBean>) query.list();
        System.out.println("=====value====="+recList);
        return recList;
    }
}

动作Class:

package com.ims.master.masterData;

import java.util.ArrayList;
import com.ims.master.company.DAO.CompanyDAO;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;

public class MasterLookUp extends ActionSupport {

    ArrayList companyCode;
    public String getCompany()
    {
        CompanyDAO companyCodeValue = new CompanyDAO();
        companyCode = companyCodeValue.retrieveCmpCode();
        return SUCCESS;
    }
    public ArrayList getCompanyCode() {
        return companyCode;
    }
    public void setCompanyCode(ArrayList companyCode) {
        this.companyCode = companyCode;
    }


}

jsp:

<s:select name="companyName" list="companyCode" key="label.companyName" listKey="cmpCode" listValue="cmpDes"/>

请告诉我下拉列表中的值是如何产生的。 还建议在编辑部分选择如何显示下拉列表中的值。

您可以在 JSP

中使用以下代码
<html:select property ="cmpDes">
    <html:optionsCollection name ="cmpDes" /> 
    </html:select>

将以上代码添加到您的 JSP 后,您的下拉菜单将包含从数据库中获取的 cmp 描述。

下面的网站有完美的学习示例 struts-1 并且也与您的问题有关,可以继续获得一些想法。 http://www.javabeat.net/struts-html-optionscollection-tag-htmloptionscollection/

您不能将 returned 值转换为 ArrayList<CompanyBean>,因为在您的情况下,Hibernate 会将查询 returned 的数据转换为 List<Object[]>。要 return List<CompanyBean> 你可以使用另一个查询。

您需要打开 Hibernate 会话来执行查询,完成后应关闭会话。仅当会话由其他工具管理时,您才不必关闭会话。您可以在 How to display a list of database records (retrieved via Hibernate) to a JSP page in Struts 2 中找到有关如何使用 Hibernate 会话的详细说明和链接的答案。

如果您更改查询和 属性 类型,查询可能 return List<CompanyBean>,因此您可以在不强制转换的情况下分配一个值。

public class CompanyDAO {

    public List<CompanyBean> retrieveCmpCode() throws Exception
    {
        System.out.println("=====inside DAO======");
        SessionFactory factory = HibernateUtil.getFactory();
        Session session = factory.openSession();
        List<CompanyBean> recList;
        try {
            Query query = session.createQuery("from CompanyBean b where b.cmpStatus=:val");
            query.setParameter("val", "Y");
            recList = query.list();
            System.out.println("=====value====="+recList);
            return recList;
        } finally {
          session.close();
        }
    }
} 

注意: @SuppressWarnings("unchecked") 不再需要。

在 JSP 中,您应该将 select 标记绑定到 return 是 List<CompanyBean> 的操作 属性,类似于您已经完成的操作。

<s:select name="companyName" list="companyCode" key="label.companyName" listKey="cmpCode" listValue="cmpDes"/>

动作

public class MasterLookUp extends ActionSupport {

    private List<CompanyBean> companyCode;
    public List<CompanyBean> getCompanyCode()  {
        return companyCode;
    }
    public void setCompanyCode(List<CompanyBean> companyCode) {
        this.companyCode = companyCode;
    }

    private String cmpCode;
    public String getCmpCode() {
        return cmpCode;
    }
    public void setCmpCode(String companyCode) {
        this.cmpCode = cmpCode;
    }

    public String getCompany() throws Exception
    {
        CompanyDAO companyCodeValue = new CompanyDAO();
        companyCode = companyCodeValue.retrieveCmpCode();
        return SUCCESS;
    }

}

注意: 到 get/set default/selected 您应该提供 select 标签的值 cmpCode 属性 .