【问题标题】:Retrieve value from database in drop-down(<s:select>) using Struts 2 and Hibernate使用 Struts 2 和 Hibernate 从下拉列表中的数据库中检索值(<s:select>)
【发布时间】:2015-10-11 12:23:25
【问题描述】:

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

下面是我的代码:

Bean 类:

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 类:

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;
    }
}

动作类:

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"/>

请建议我如何在下拉菜单中输入值。 还建议在编辑部分选择下拉列表中的值如何显示。

【问题讨论】:

  • 你知道标签值bean是如何工作的吗?

标签: java hibernate jsp struts2 hql


【解决方案1】:

你可以在你的 JSP 中使用下面的代码

<html:select property ="cmpDes">
    <html:optionsCollection name ="cmpDes" /> 
    </html:select>

当您的 JSP 中添加上述代码时,您的下拉菜单将包含从 DB 获取的 cmp 描述。

以下是学习 struts-1 的完美示例的网站,也与您提出的一些想法有关。 http://www.javabeat.net/struts-html-optionscollection-tag-htmloptionscollection/

【讨论】:

  • 嗨 Aleksandr M,非常感谢您的回复,但我正在使用 struts2,所以我需要 Struts2 的帮助。
  • @RaviKukreja:Divya S 回答了你的问题。我刚刚编辑/评论。
【解决方案2】:

您不能将返回值转换为ArrayList&lt;CompanyBean&gt;,因为在您的情况下,Hibernate 会将查询返回的数据转换为List&lt;Object[]&gt;。要返回 List&lt;CompanyBean&gt;,您可以使用另一个查询。

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

如果您更改查询和属性类型,查询可能会返回 List&lt;CompanyBean&gt;,因此您可以在不强制转换的情况下分配值。

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 标记绑定到返回 List&lt;CompanyBean&gt; 的操作属性,就像您已经完成的那样。

<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;
    }

}

注意:要获取/设置选择标签的默认/选定值,您应该提供cmpCode 属性。

【讨论】:

    猜你喜欢
    • 2013-09-26
    • 2013-09-30
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    • 1970-01-01
    相关资源
    最近更新 更多