
ajax:记住前面返回的是数据流
$.post("/OtherOutDepotDetail/ShowSelect?id=" + OODID, "", function(data) {
var list = data
$("#tb tr:gt(0)").remove()
for (var i = 0i <list.lengthi++) {
var info = list[i]
var tr = $("<tr></tr>")
tr.append("<td>" + info.OODID + "</td>")
tr.append("<td>" + info.ProID + "</td>")
tr.append("<td>" + info.OODDAmount + "</td>")
tr.append("<td>" + info.OODDPrice + "</td>")
var num = eval(info.OODDAmount * info.OODDPrice)
tr.append($("<td >" + num + "</td>"))
tr.append("<td>" + info.OODDDesc + "</td>")
tr.appendTo("#tb tbody")
}
})
方法2:转 list<实体类>
public action 控制器名(){
前面的sql语句就不写了反正得到一个有值的datatable
调用SelectsAll<Product_List>(dt)
List<Product_List>list = mdhep.SelectsAll<Product_List>(dt)
ViewBag.List = list
return View()
}
实体类:
public class Product_List
{
public int ID{getset} //主键
public string Product_MingCheng{getset}//名称
public string Product_JieShao{getset} //简介
}
//SelectsAll<Product_List>()方法,把datatable转换为list<实体>
public List<T>SelectsAll<T>(DataTable dt) where T : new()
{
// 定义集合
List<T>list = new List<T>()
// 获得此模型的类型
Type type = typeof(T)
//定义一个临时变量
string tempName = string.Empty
//遍历DataTable中所有的数据行
foreach (DataRow dr in dt.Rows)
{
T t = new T()
// 获得此模型的公共属性
PropertyInfo[] propertys = t.GetType().GetProperties()
//遍历该对象的所有属性
foreach (PropertyInfo pi in propertys)
{
tempName = pi.Name//将属性名称赋值给临时变量
//检查DataTable是否包含此列(列名==对象的属性名)
if (dt.Columns.Contains(tempName))
{
// 判断此属性是否有Setter
if (!pi.CanWrite) continue//该属性不可写,直接跳出
//取值
object value = dr[tempName]
//如果非空,则赋给对象的属性
if (value != DBNull.Value)
pi.SetValue(t, value, null)
}
}
//对象添加到泛型集合中
list.Add(t)
}
dt.Clear()
dt.Dispose()
return list
}
HTML:这样就行了
1,引用实体类
2
<table>
foreach(Product_List pd in ViewBag.List)
{
<tr>
<td>>@pd.Product_MingCheng</td>
<td>>>@pd.Product_JieShao</td>
</tr>
}
</table>
希望能解决你的问题,方法2应该够详细了
一) 其实这个功能在spring2.x时代就提供了。一直没用过,今天在spring-mvc3.2.x的环境下试验了一次。还算简单易用。
二) 依赖。
spring依赖POI或jExcel来实现对excel输出的支持,前者是apache出品,貌似名气更大,本例使用第一个。
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.7</version>
</dependency>
三) spring提供了一个AbstractExcelView作为自己实现的视图的父类。实例代码如下。
package ying.car.view
import java.text.DateFormat
import java.text.SimpleDateFormat
import java.util.List
import java.util.Map
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse
import org.apache.poi.hssf.usermodel.HSSFDataFormat
import org.apache.poi.hssf.usermodel.HSSFSheet
import org.apache.poi.hssf.usermodel.HSSFWorkbook
import org.apache.poi.ss.usermodel.Cell
import org.apache.poi.ss.usermodel.CellStyle
import org.apache.poi.ss.usermodel.IndexedColors
import org.joda.time.DateTime
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import org.springframework.web.servlet.view.document.AbstractExcelView
import ying.car.binding.DateRange
import ying.car.domain.RefuelingRecord
public class RefuelingRecordExcelView extends AbstractExcelView {
private static final Logger LOGGER = LoggerFactory.getLogger(RefuelingRecordExcelView.class)
private static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyyMMdd")
@Override
@SuppressWarnings({"unchecked"})
protected void buildExcelDocument(
Map<String, Object> model, // MVC中的M就在这里了
HSSFWorkbook workbook,
HttpServletRequest request,
HttpServletResponse response) throws Exception
{
("yyyy/MM/dd"))
LOGGER.debug("end: {}", new DateTime(dr.getEnd()).toString("yyyy/MM/dd"))
}
}
HSSFSheet sheet = workbook.createSheet(DATE_FORMAT.format(dr.getStart()) + "-" + DATE_FORMAT.format(dr.getEnd()))
setColumnsWidth(sheet)
fillTableHeader(workbook, sheet)
fillTableBody(workbook, sheet, rrl)
}
private void setColumnsWidth(HSSFSheet sheet) {
final int[] warr = new int[] {
500, // <空>
4500, // 日期
4500, // 车辆
4500, // 燃油种类
4500, // 燃油单价
4500, // 加油方式
4500, // 加油量
3000, // 花费
12000 // 备注
}
for (int i = 0 i < warr.length i ++) {
sheet.setColumnWidth(i, warr[i])
}
}
// 填充表格头
private void fillTableHeader(HSSFWorkbook workbook, HSSFSheet sheet) {
final String[] contents = new String[] {
"日期",
"车辆",
"燃油种类",
"燃油单价(元/升)",
"加油方式",
"加油量(升)",
"花费(元)",
"备注"
}
int r = 1
int c = 1
CellStyle style = workbook.createCellStyle()
style.setFillForegroundColor(IndexedColors.YELLOW.getIndex()) // 填充黄色
style.setFillPattern(CellStyle.SOLID_FOREGROUND) // 填充方式
// 设置border
style.setBorderLeft(CellStyle.BORDER_THIN)
style.setBorderRight(CellStyle.BORDER_THIN)
style.setBorderTop(CellStyle.BORDER_THIN)
style.setBorderBottom(CellStyle.BORDER_THIN)
for (int i = 0 i < contents.length i ++) {
Cell cell = getCell(sheet, r, c + i)
cell.setCellValue(contents[i])
cell.setCellStyle(style)
}
}
private void fillTableBody(HSSFWorkbook workbook, HSSFSheet sheet, List<RefuelingRecord> records) {
// 通用style
CellStyle style = workbook.createCellStyle()
style.setFillForegroundColor(IndexedColors.WHITE.getIndex()) // 填充白色
style.setFillPattern(CellStyle.SOLID_FOREGROUND) // 填充方式
style.setBorderLeft(CellStyle.BORDER_THIN)
style.setBorderRight(CellStyle.BORDER_THIN)
style.setBorderTop(CellStyle.BORDER_THIN)
style.setBorderBottom(CellStyle.BORDER_THIN)
// 日期style
CellStyle dateStyle = workbook.createCellStyle()
dateStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex()) // 填充白色
dateStyle.setFillPattern(CellStyle.SOLID_FOREGROUND) // 填充方式
dateStyle.setBorderLeft(CellStyle.BORDER_THIN)
dateStyle.setBorderRight(CellStyle.BORDER_THIN)
dateStyle.setBorderTop(CellStyle.BORDER_THIN)
dateStyle.setBorderBottom(CellStyle.BORDER_THIN)
dateStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy"))
int r = 2
int c = 1
Cell cell = null
for (int i = 0 i < records.size() i ++) {
RefuelingRecord rr = records.get(i)
// 日期
cell = getCell(sheet, r, c + 0)
if (rr.getDate() != null)
cell.setCellValue(rr.getDate())
cell.setCellStyle(dateStyle)
// 车辆
cell = getCell(sheet, r, c + 1)
if (rr.getVehicle().getNickname() != null)
cell.setCellValue(rr.getVehicle().getNickname())
cell.setCellStyle(style)
// 燃油种类
cell = getCell(sheet, r, c + 2)
if (rr.getGasType() != null) {
String s = null
switch (rr.getGasType()) {
case _0: s = "0号柴油" break
case _93: s = "93号汽油" break
case _97: s = "97号汽油" break
case _98: s = "98号汽油" break
}
cell.setCellValue(s)
}
cell.setCellStyle(style)
// 单价
cell = getCell(sheet, r, c + 3)
if (rr.getPriceOfGas() != null)
cell.setCellValue(rr.getPriceOfGas())
cell.setCellStyle(style)
// 加油方式
cell = getCell(sheet, r, c + 4)
if (rr.getRefuelingType() != null) {
String s = null
switch (rr.getRefuelingType()) {
case FIXED_CUBAGE:
s = "固定容积" break
case FIXED_MONEY:
s = "固定金额" break
case FULL:
s = "加满" break
}
cell.setCellValue(s)
}
cell.setCellStyle(style)
// 加油量
cell = getCell(sheet, r, c + 5)
if (rr.getCubageOfGas() != null)
cell.setCellValue(rr.getCubageOfGas())
cell.setCellStyle(style)
// 花费
cell = getCell(sheet, r, c + 6)
if (rr.getSumOfMoney() != null)
cell.setCellValue(rr.getSumOfMoney())
cell.setCellStyle(style)
// 备注
cell = getCell(sheet, r, c + 7)
if (rr.getComment() != null)
cell.setCellValue(rr.getComment())
cell.setCellStyle(style)
r ++
}
}
}
cell.setCellStyle(style)
// 燃油种类
cell = getCell(sheet, r, c + 2)
if (rr.getGasType() != null) {
String s = null
switch (rr.getGasType()) {
case _0: s = "0号柴油"break
case _93: s = "93号汽油"break
case _97: s = "97号汽油"break
case _98: s = "98号汽油"break
}
cell.setCellValue(s)
}
cell.setCellStyle(style)
// 单价
cell = getCell(sheet, r, c + 3)
if (rr.getPriceOfGas() != null)
cell.setCellValue(rr.getPriceOfGas())
cell.setCellStyle(style)
// 加油方式
cell = getCell(sheet, r, c + 4)
if (rr.getRefuelingType() != null) {
String s = null
switch (rr.getRefuelingType()) {
case FIXED_CUBAGE:
s = "固定容积"break
case FIXED_MONEY:
s = "固定金额"break
case FULL:
s = "加满"break
}
cell.setCellValue(s)
}
cell.setCellStyle(style)
// 加油量
cell = getCell(sheet, r, c + 5)
if (rr.getCubageOfGas() != null)
cell.setCellValue(rr.getCubageOfGas())
cell.setCellStyle(style)
// 花费
cell = getCell(sheet, r, c + 6)
if (rr.getSumOfMoney() != null)
cell.setCellValue(rr.getSumOfMoney())
cell.setCellStyle(style)
// 备注
cell = getCell(sheet, r, c + 7)
if (rr.getComment() != null)
cell.setCellValue(rr.getComment())
cell.setCellStyle(style)
r ++
}
}
}
四) Controller中返回逻辑视图名 (代码片段)
Java代码
@RequiresUser // 安全框架用元注释
@RequiresRoles({"ROLE_USER"})
@RequestMapping(value = "/list/excel", method = RequestMethod.GET)
public String listByExcel(
@DateRangeFormat(pattern = "yyyy-MM-dd") @RequestParam("dateRange") DateRange dateRange,
ModelMap modelMap
)
{
}
// 放入model
modelMap.put("dateRange", dateRange)
modelMap.put("refuelingRecordList", gasService.findRefuelingRecordByDateRange(currentUserId, dateRange))
return "refueling-record-list" // 最终返回逻辑视图名
}
五) 为spring-mvc配置多个视图解析器。
<bean class="org.springframework.web.servlet.view.XmlViewResolver">
<property name="order" value="1" /> <!-- order很重要 -->
<property name="location" value="classpath:/META-INF/views.xml" />
</bean>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="order" value="9999" />
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
六) 效果图
一、php配置MySQL1、将php安装目录下的php_mysql.dll和MySQL安装目录下的libmysql.dll文件拷贝至c:/windows/system32中;
2、配置php.ini
extension=php_gd2.dll
extension=php_mbstring.dll
extension=php_mysql.dll
extension=php_mysqli.dll
把上面四个。dll的最前面的;去掉
二、php表单提交至数据库的实现过程
1、login.php页面
<SPAN style="FONT-SIZE: 14px"><html>
<FORM method=post action=add.php>
Name: <INPUT name=username><BR>
Email: <INPUT name=email><BR>
<INPUT value=提交 type=submit name=submit>
</FORM>
</SPAN>
2、add.php页面
<SPAN style="FONT-SIZE: 14px"><?php
include("conn.php");
?>
<?php
if(isset($_POST["submit"]))
{
$sql = "insert into users(username, email) values('$_POST[username]', '$_POST[email]')"
mysqli_query($conn, $sql);
echo "添加成功"
}
?></SPAN>
3、conn.php页面
<SPAN style="FONT-SIZE: 14px"><?php
$conn = new mysqli("localhost", "root", "159357");
$conn->select_db("db_test");
//mysql_query("set name 'gb2312'");
$conn->set_charset("utf8");
?></SPAN>
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)