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

Java 使用Struts 2和Hibernate从下拉列表(<;s:select>;)中的数据库检索值,java,hibernate,jsp,struts2,hql,Java,Hibernate,Jsp,Struts2,Hql,我想使用下拉菜单并从数据库中获取下拉菜单中的值,下拉菜单应包含用于保存目的的公司代码和用于显示目的的公司说明 下面是我的代码: Bean类: 包com.ims.master.company.bean; 公共类公司bean{ 私有字符串id; 私有字符串cmpCode; 私有字符串CMPD; 私有字符串cmpStatus; 创建私有字符串CMP; 公共公司bean(字符串cmpCode、字符串cmpDes){ 超级(); this.cmpCode=cmpCode; this.cmpDes=cmpD

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

下面是我的代码:

Bean类:

包com.ims.master.company.bean;
公共类公司bean{
私有字符串id;
私有字符串cmpCode;
私有字符串CMPD;
私有字符串cmpStatus;
创建私有字符串CMP;
公共公司bean(字符串cmpCode、字符串cmpDes){
超级();
this.cmpCode=cmpCode;
this.cmpDes=cmpDes;
}
公共字符串getId(){
返回id;
}
公共无效集合id(字符串id){
this.id=id;
}
公共字符串getCmpCreated(){
返回创建的CMP;
}
公共void setCmpCreated(字符串cmpCreated){
this.cmpCreated=cmpCreated;
}
公共字符串getCmpCode(){
返回cmpCode;
}
public void setCmpCode(字符串cmpCode){
this.cmpCode=cmpCode;
}
公共字符串getCmpDes(){
返回CMPD;
}
公共无效设置cmpDes(字符串cmpDes){
this.cmpDes=cmpDes;
}
公共字符串getCmpStatus(){
返回cmpStatus;
}
公共无效设置cmpStatus(字符串cmpStatus){
this.cmpStatus=cmpStatus;
}
}
DAO类:

包com.ims.master.company.DAO;
导入java.util.ArrayList;
导入org.hibernate.Query;
导入org.hibernate.Session;
导入org.hibernate.SessionFactory;
导入com.ims.hibernate.HibernateUtil;
导入com.ims.master.company.bean.CompanyBean;
公营公司道{
SessionFactory=HibernateUtil.getFactory();
Session Session=factory.openSession();
ArrayList recList=新建ArrayList();
@抑制警告(“未选中”)
公共ArrayList retrieveCmpCode()
{
System.out.println(“=======内部DAO=======”;
Query Query=session.createQuery(“从CompanyBean b中选择b.cmpCode,b.cmpDes,其中b.cmpStatus=:val”);
query.setParameter(“val”、“Y”);
recList=(ArrayList)query.list();
System.out.println(“=======值=====”+重新列出);
回归隐士;
}
}
动作类:

包com.ims.master.masterData;
导入java.util.ArrayList;
导入com.ims.master.company.DAO.CompanyDAO;
导入com.opensymphony.xwork2.ActionSupport;
导入com.opensymphony.xwork2.ModelDriven;
导入com.opensymphony.xwork2.Preparable;
公共类MasterLookUp扩展了ActionSupport{
ArrayList公司代码;
公共字符串getCompany()
{
CompanyDAO companyCodeValue=新CompanyDAO();
companyCode=companyCodeValue.retrieveCmpCode();
回归成功;
}
公共阵列列表getCompanyCode(){
返回公司代码;
}
公共无效setCompanyCode(ArrayList companyCode){
this.companyCode=companyCode;
}
}
jsp:


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

您可以在JSP中使用以下代码

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

当在URJSP中添加上述代码时,您的下拉列表将具有从DB获取的cmp描述

下面是一个学习struts-1的好例子,也和你们的问题有关,你们可以从中获得一些想法。

您不能将返回值强制转换为
ArrayList
,因为在您的情况下,Hibernate会将查询返回的数据转换为
列表。要返回
列表
,您可以使用另一个查询

您需要打开Hibernate会话来执行查询,完成后应该关闭会话。只有当会话由其他工具管理时,才不必关闭会话。您可以在中找到如何使用Hibernate会话的详细说明,以及链接的答案

如果更改查询和属性类型,查询可能会返回
List
,因此可以不强制转换而指定值

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();
        }
    }
} 
行动

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

}
公共类MasterLookUp扩展了ActionSupport{
私人上市公司代码;
公共列表getCompanyCode(){
返回公司代码;
}
public void setCompanyCode(列出companyCode){
this.companyCode=companyCode;
}
私有字符串cmpCode;
公共字符串getCmpCode(){
返回cmpCode;
}
公共无效setCmpCode(字符串公司代码){
this.cmpCode=cmpCode;
}
公共字符串getCompany()引发异常
{
CompanyDAO companyCodeValue=新CompanyDAO();
companyCode=companyCodeValue.retrieveCmpCode();
回归成功;
}
}

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

您知道标签值bean是如何工作的吗?嗨,Aleksandr M,非常感谢您的回答,但我正在使用struts2,所以我需要struts2方面的帮助。@RaviKukreja:Divya回答了您的问题。我刚刚编辑/评论过。
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;
    }

}