一、需求:目前在做一集中监控系统的项目,其中有个需求就是agent采集上来的针对每个属性的数据都是分多行存储的(如文件系统属性,有盘符、空间大小,使用量、空闲量等多行记录),现在要把这么多行的记录转化成一行记录,这行记录每一列数据对应先前的每一行数据。
二、建表(使用oracle10g)
CREATE TABLE T_PROPERTY_STATUS
(
PROPERTYSTATUS_ID INTEGER NOT NULL,
OBJECTPROPERTY_ID INTEGER,
PROPERTYSTATUSNAME VARCHAR2(64 BYTE),
PROPERTY_STATUS_VALUE VARCHAR2(1024 BYTE),
PROPERTY_STATUS INTEGER,
IFMONITOR INTEGER,
IFNOTIFY INTEGER,
IFRESTORE INTEGER,
PERFORMDATE DATE,
UNITE_INDEX INTEGER
)
表中数据:
需要在页面中显示成的记录形式:
三、采用SSH框架实现
1. 创建对应原始表的实体类(PropertyStatus.java):
package bscms3.monitorobjmng.domain;
import java.util.Date;
public class PropertyStatus implements java.io.Serializable{
private Integer propertyStatusId;
private Integer objectPropertyId;
private String propertyStatusName;
private String propertyStatusValue;
private Integer propertyStatus;
private Integer ifMonitor;
private Integer ifNotify;
private Integer ifRestore;
private Date performDate;
private Integer uniteIndex;
public Integer getPropertyStatusId() {
return propertyStatusId;
}
public void setPropertyStatusId(Integer propertyStatusId) {
this.propertyStatusId = propertyStatusId;
}
public Integer getObjectPropertyId() {
return objectPropertyId;
}
public void setObjectPropertyId(Integer objectPropertyId) {
this.objectPropertyId = objectPropertyId;
}
public String getPropertyStatusName() {
return propertyStatusName;
}
public void setPropertyStatusName(String propertyStatusName) {
this.propertyStatusName = propertyStatusName;
}
public String getPropertyStatusValue() {
return propertyStatusValue;
}
public void setPropertyStatusValue(String propertyStatusValue) {
this.propertyStatusValue = propertyStatusValue;
}
public Integer getPropertyStatus() {
return propertyStatus;
}
public void setPropertyStatus(Integer propertyStatus) {
this.propertyStatus = propertyStatus;
}
public Integer getIfMonitor() {
return ifMonitor;
}
public void setIfMonitor(Integer ifMonitor) {
this.ifMonitor = ifMonitor;
}
public Integer getIfNotify() {
return ifNotify;
}
public void setIfNotify(Integer ifNotify) {
this.ifNotify = ifNotify;
}
public Integer getIfRestore() {
return ifRestore;
}
public void setIfRestore(Integer ifRestore) {
this.ifRestore = ifRestore;
}
public Date getPerformDate() {
return performDate;
}
public void setPerformDate(Date performDate) {
this.performDate = performDate;
}
public Integer getUniteIndex() {
return uniteIndex;
}
public void setUniteIndex(Integer uniteIndex) {
this.uniteIndex = uniteIndex;
}
}
2. 对应该实体类的映射文件(PropertyStatus.hbm.xml):
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="bscms3.monitorobjmng.domain.PropertyStatus" table="t_property_status" catalog="bscms">
<id name="propertyStatusId" type="java.lang.Integer">
<column name="propertystatus_id" />
<generator class="sequence" >
<param name="sequence">PUBLIC_SEQ</param>
</generator>
</id>
<property name="objectPropertyId" type="java.lang.Integer">
<column name="objectproperty_id" />
</property>
<property name="propertyStatusName" type="java.lang.String">
<column name="propertystatusname" length="64" />
</property>
<property name="propertyStatusValue" type="java.lang.String">
<column name="property_status_value" length="1024" />
</property>
<property name="propertyStatus" type="java.lang.Integer">
<column name="property_status"/>
</property>
<property name="ifMonitor" type="java.lang.Integer">
<column name="ifmonitor"/>
</property>
<property name="ifNotify" type="java.lang.Integer">
<column name="ifnotify"/>
</property>
<property name="ifRestore" type="java.lang.Integer">
<column name="ifrestore"/>
</property>
<property name="performDate" type="java.util.Date">
<column name="performdate"/>
</property>
<property name="uniteIndex" type="java.lang.Integer">
<column name="unite_index"/>
</property>
</class>
</hibernate-mapping>
3.DAO接口及实现类(PropertyStatusDao.java, PropertyStatusDaoImpl.java)
//PropertyStatusDao.java
package bscms3.monitorobjmng.dao;
import java.util.List;
import bscms3.monitorobjmng.domain.PropertyStatus;
public interface PropertyStatusDao {
public List<PropertyStatus> getAllPropertyStatus(Integer objectPropertyId);
public Integer getRows(Integer objectPropertyId);
public Long getCols(Integer objectPropertyId);
}
//PropertyStatusDaoImpl.java
package bscms3.monitorobjmng.dao.impl;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import bscms3.monitorobjmng.dao.PropertyStatusDao;
import bscms3.monitorobjmng.domain.PropertyStatus;
public class PropertyStatusDaoImpl extends HibernateDaoSupport implements PropertyStatusDao{
public List<PropertyStatus> getAllPropertyStatus(Integer objectPropertyId){
String sql=null;
sql="FROM PropertyStatus ps WHERE ps.objectPropertyId="+objectPropertyId+"ORDER BY ps.propertyStatusId";
return this.getHibernateTemplate().find(sql);
}
public Integer getRows(Integer objectPropertyId){
String sql = "select max(uniteIndex) from PropertyStatus where objectPropertyId="+objectPropertyId;
return (Integer)this.getHibernateTemplate().find(sql).get(0)+1;
}
public Long getCols(Integer objectPropertyId){
String sql = "select count(propertyStatusId) from PropertyStatus where objectPropertyId="+objectPropertyId+" and uniteIndex=1";
return (Long)this.getHibernateTemplate().find(sql).get(0);
}
}
4. Service接口及实现类(PropertyStatusService.java, PropertyStatusServiceImpl.java)
//PropertyStatusService.java
package bscms3.monitorobjmng.service;
import java.util.List;
import bscms3.monitorobjmng.domain.PropertyStatus;
public interface PropertyStatusService {
public List<PropertyStatus> getAllPropertyStatus(Integer objectPropertyId);
public Integer getRows(Integer objectPropertyId);
public Long getCols(Integer objectPropertyId);
}
//PropertyStatusServiceImpl.java
package bscms3.monitorobjmng.service.impl;
import java.util.List;
import bscms3.monitorobjmng.dao.PropertyStatusDao;
import bscms3.monitorobjmng.domain.PropertyStatus;
import bscms3.monitorobjmng.service.PropertyStatusService;
public class PropertyStatusServiceImpl implements PropertyStatusService{
PropertyStatusDao propertyStatusDao;
public List<PropertyStatus> getAllPropertyStatus(Integer objectPropertyId){
return propertyStatusDao.getAllPropertyStatus(objectPropertyId);
}
public Integer getRows(Integer objectPropertyId){
return propertyStatusDao.getRows(objectPropertyId);
}
public Long getCols(Integer objectPropertyId){
return propertyStatusDao.getCols(objectPropertyId);
}
public PropertyStatusDao getPropertyStatusDao() {
return propertyStatusDao;
}
public void setPropertyStatusDao(PropertyStatusDao propertyStatusDao) {
this.propertyStatusDao = propertyStatusDao;
}
}
5. Action类 (PropertyStatusAction.java)
//PropertyStatusAction.java
package bscms3.strategymng.action.strategies;
import java.util.List;
import bscms3.monitorobjmng.domain.PropertyStatus;
import bscms3.monitorobjmng.service.PropertyStatusService;
import com.opensymphony.xwork2.ActionSupport;
public class PropertyStatusAction extends ActionSupport{
private Integer objectPropertyId;//由于查的是关于监控对象的某一属性的信息,所以需要上文带来属性ID的值
private PropertyStatusService propertyStatusService;
private String[][] items;//用于存放处理后的数据,第一行存放表头,其余行存对应的数据
public Integer getObjectPropertyId() {
return objectPropertyId;
}
public void setObjectPropertyId(Integer objectPropertyId) {
this.objectPropertyId = objectPropertyId;
}
public PropertyStatusService getPropertyStatusService() {
return propertyStatusService;
}
public void setPropertyStatusService(PropertyStatusService propertyStatusService) {
this.propertyStatusService = propertyStatusService;
}
public String[][] getItems() {
return items;
}
public void setItems(String[][] items) {
this.items = items;
}
public String getData(){
if(this.objectPropertyId!=null){
List<PropertyStatus> propertyStatus=propertyStatusService.getAllPropertyStatus(this.objectPropertyId);
int row=(int)propertyStatusService.getRows(this.objectPropertyId);
long col=(long)propertyStatusService.getCols(this.objectPropertyId);
int col2=(int) col;
String[][] tmp_items=new String[row][col2];
int row_index=1,col_index=0;
for(int i=0; i<propertyStatus.size();i++){
PropertyStatus tmp_propertyStatus=(PropertyStatus)propertyStatus.get(i);
if(tmp_items[0][col_index]==null)
tmp_items[0][col_index]=tmp_propertyStatus.getPropertyStatusName();
tmp_items[row_index][col_index]=tmp_propertyStatus.getPropertyStatusValue();
col_index++;
if(col_index>=col2){
col_index=0;
row_index++;
}
}
this.setItems(tmp_items);
return SUCCESS;
}
return ERROR;
}
}
6.配置applicationContext.xml
<?xml version="1.0" encoding="GBK"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 定义c3p0数据源 -->
<bean id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<!-- 指定连接数据库驱动 -->
<!-- property name="driverClass" value="com.mysql.jdbc.Driver" / -->
<property name="driverClass" value="oracle.jdbc.driver.OracleDriver" />
<!-- 指定连接数据库url -->
<property name="jdbcUrl" value="jdbc:oracle:thin:@10.66.7.233:1522:bscms" />
<!-- 指定连接数据库用户名,密码为空 -->
<property name="user" value="bscms" />
<property name="password" value="bscms" />
</bean>
<!-- 定义Hibernate的sessionFactory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!-- 指定数据源 -->
<property name="dataSource" ref="dataSource" />
<!-- 指定Hibernate映射文件 -->
<property name="mappingResources">
<list>
<value>bscms3/monitorobjmng/domain/PropertyStatus.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<!-- 指定使用方言 -->
<prop key="hibernate.dialect">
org.hibernate.dialect.OracleDialect
</prop>
<!-- 是否在控制台输出sql语句 -->
<prop key="show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.jdbc.batch_size">20</prop>
<!-- 解决查询中文乱码的问题 -->
<prop key="hibernate.query.factory_class">
org.hibernate.hql.ast.ASTQueryTranslatorFactory
</prop>
</props>
</property>
</bean>
<!-- 定义事务管理 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 定义事务管理拦截器 -->
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<!-- 定义代理自动管理事务 -->
<bean id="ProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<!-- 指定需要Spring管理事务的Bean -->
<property name="beanNames">
<list>
</list>
</property>
<!-- 调用事务管理拦截器 -->
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean>
<!-- 依赖注入 -->
<bean id="propertyStatusAction" class="bscms3.strategymng.action.strategies.PropertyStatusAction">
<property name="propertyStatusService" ref="propertyStatusService" />
</bean>
<!-- service -->
<bean id="propertyStatusService" class="bscms3.monitorobjmng.service.impl.PropertyStatusServiceImpl">
<property name="propertyStatusDao" ref="propertyStatusDao"/>
</bean>
<!-- dao -->
<bean id="propertyStatusDao" class="bscms3.monitorobjmng.dao.impl.PropertyStatusDaoImpl">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
</beans>
7.配置struts.xml
<action name="propertyStatus" class="propertyStatusAction" method="getData">
<result>/jsp/strategymng/propertystatus.jsp</result>
</action>
8.创建:propertystatus.jsp
<%@ page language="java" contentType="text/html; charset=GB2312"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'propertystatus.jsp' starting page</title>
</head>
<body>
<table border="1" id="table11">
<s:iterator id="data1" value="items" status="st1">
<tr>
<s:iterator id="data2" value="items[#st1.index]" status="st2">
<td>
<s:property value="data2"/>
</td>
</s:iterator>
</tr>
</s:iterator>
</table>
</body>
</html>
9.在浏览器中输入:http://localhost:8080/bscms3/propertyStatus.action?objectPropertyId=10054 结果如下:
- 大小: 72.5 KB
- 大小: 16.6 KB
- 大小: 79.9 KB
分享到:
相关推荐
本文将深入探讨如何使用Struts2中的`<s:iterator>`标签来遍历二维数组,并通过实例代码来具体说明其用法。 ### Struts2 Iterator标签 #### 1. 基本概念 `<s:iterator>`是Struts2的一个非常强大的标签,主要用于...
在本文中,我们将探讨如何使用SSH1框架与jQuery的AJAX功能来处理JSON二维数组,特别是在实现菜单联动下拉框的场景中。SSH1(Spring、Struts、Hibernate)是Java开发中的一个流行MVC框架组合,而jQuery的AJAX功能则...
在本场景中,我们将探讨如何使用AJAX来传递JSON数组,并在Struts2的Action中接收和处理这些数据。 首先,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它易于人阅读和编写,同时也易于机器解析...
亲自做了一个struts2后台接收前台jsp页面传来的数组参数demo,因为参考网上的资源如用webwork表单提交等集成到项目有问题,所以做了一个单独的demo,经测试,用表单提交类似users[0].name,users[1].name的数组参数是...
在本教程中,我们将深入探讨如何利用Struts2来实现对Oracle数据库的CRUD(创建、读取、更新和删除)操作。 首先,我们需要在项目中集成Struts2框架。这通常涉及到以下几个步骤: 1. 添加Struts2的核心库到项目的类...
本文将深入探讨如何使用jQuery的AJAX方法发送JSON对象数组到Struts2的Action,并在后端进行处理。 首先,我们了解JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于...
本资源主要关注Struts2如何与数据库进行交互,包括基本的CRUD(创建、读取、更新、删除)操作,分页显示数据,以及执行条件查询(模糊查询)。 首先,让我们深入了解一下Struts2是如何处理数据库操作的。Struts2...
Struts2是一个强大的MVC(Model-View-Controller)框架,它在Java Web...通过这个项目,开发者可以学习到如何在Struts2框架下利用JDBC与数据库交互,同时掌握JSP页面和标签库的使用,从而提升对Java Web开发的理解。
在本案例中,我们探讨的是如何利用Struts2框架处理文件上传,并将上传的图片以BLOB(Binary Large Object)类型存储在数据库中,同时提供下载功能。Hibernate则是一个对象关系映射(ORM)框架,它简化了数据库操作,...
这包括在项目的`web.xml`文件中添加Struts 2的核心过滤器,以及在`struts.xml`配置文件中定义Action和结果页面。Action是Struts 2中的业务逻辑载体,它将处理用户的请求,并与数据库进行交互。 接着,创建一个登录...
在本项目"struts2+jdbc实现图片的存储与显示(图片存储在数据库内)"中,我们将探讨如何结合这两个技术来处理图片数据,将图片存储到数据库内,并从数据库中检索以供显示。 首先,我们需要了解在数据库中存储图片的...
总的来说,这个"Struts2用户登录实例(无数据库)"是一个很好的起点,可以帮助初学者理解Struts2的基本工作流程,以及如何在没有数据库的情况下实现用户登录功能。一旦掌握了这些基础,可以进一步探索如何整合数据库...
在Struts2中实现数据库操作是常见的需求,包括查询、添加、修改和删除数据。以下将详细讲解如何在Struts2中进行这些基本操作。 1. **连接数据库** 在Struts2中,通常我们会创建一个数据库连接类,如`DBcon`,它...
8. **页面跳转与数据传递**:在Struts2中,Action类的方法返回的结果名对应一个视图,如jsp页面,同时可以通过ActionContext或ModelDriven接口将数据传递到视图。页面之间的跳转和数据传递是Struts2的一大特点,简化...
在这个特定的项目中,我们看到的是一个关于如何使用Struts实现图片上传、存储到数据库以及在JSP页面显示的过程。以下是相关的知识点详解: 1. **Struts框架**:Struts是Apache软件基金会的一个开源项目,它提供了...
在这个“struts2连接mysql数据库登录验证程序”中,我们主要探讨以下几个关键知识点: 1. **Struts2框架**:Struts2作为MVC设计模式的实现,负责处理HTTP请求,通过Action类将用户请求映射到业务逻辑,并将结果传递...
在本教程中,我们将深入探讨如何使用Struts2与SQL Server 2008数据库进行交互,实现数据的增删查改(CRUD:Create, Read, Update, Delete)操作。 首先,让我们从环境搭建开始。MyEclipse 7.0 是一个集成开发环境,...
都市供求信息网是一个基于Struts2架构开发的网站示例,它主要用于展示如何在实际项目中运用Struts2框架来构建动态、数据驱动的Web应用。Struts2是一个强大且灵活的MVC(Model-View-Controller)框架,它简化了Java ...
本项目聚焦于利用Struts2框架进行数据库操作以及实现简单的分页功能,同时也涉及到用户登录和查询、修改等基本操作。 首先,让我们深入理解Struts2的核心概念。Struts2框架通过Action类处理HTTP请求,每个Action类...
在这个"连数据库的Struts2例子"中,我们将深入探讨如何使用Struts2与MySQL数据库进行交互,实现数据的添加和查询功能。 首先,我们需要确保环境准备就绪。这包括安装JDK、MySQL数据库、Struts2框架以及相关的开发...