2015-07-21 37 views
1

我想使用下拉菜单并从数据库中获取下拉值,下拉菜单应该包含用于保存目的的公司代码。&公司描述用于显示目的。使用Struts 2和Hibernate从数据库检索数值(<s:select>)

下面是我的代码:

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

Action类:

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

请给我建议的价值怎么会在下拉。 还建议在编辑部分中如何显示下拉中的值。

+0

你知道一个标签值bean是如何工作的吗? –

回答

0

,你可以在你的JSP

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

当上面的代码在乌拉圭回合JSP添加使用下面的代码,你的下拉菜单将有CMP说明这是从数据库中取出。

及以下网站,其中有完美的例子来学习的struts-1也关系到你的问题得到一些想法去。 http://www.javabeat.net/struts-html-optionscollection-tag-htmloptionscollection/

+2

您的代码适用于S1。 OP使用S2。 –

+0

嗨Aleksandr M, 许多非常感谢您的回复,但我使用的是struts2,所以我需要Struts2的帮助。 –

+0

@RaviKukreja:Divya S回答了你的问题。我刚刚编辑/评论。 –

1

您不能将返回的值转换为ArrayList<CompanyBean>,因为您的情况下Hibernate会将查询返回的数据转换为List<Object[]>。要返回List<CompanyBean>,您可以使用其他查询。

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

查询可能会返回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中,你应该绑定选择标签像你已经做了一个返回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; 
    } 

} 

注:获取/设置默认/选择的选择标记的价值,你应该提供cmpCode财产。