前面一篇文章已经分析好了数据库的表,这篇文章针对购销合同表做一个增删改查。

和之前的表的增删该查类似。

项目结构如下:

aaarticlea/png;base64,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" alt="" />

aaarticlea/png;base64,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" alt="" />

上面红色的框出来的部分就是这个项目要用的文件代码。

依次涵盖了从ContractMapper.xml->Dao层->Service层->Controll控制层

代码依次如下:

ContractMapper.xml代码:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.itcast.jk.mapper.ContractMapper">
<resultMap type="cn.itcast.jk.domain.Contract" id="contractRM">
<id property="id" column="CONTRACT_ID" />
<result property="offeror" column="OFFEROR" />
<result property="contractno" column="CONTRACT_NO" />
<result property="signingDate" column="SIGNING_DATE" />
<result property="inputBy" column="INPUT_BY" />
<result property="checkBy" column="CHECK_BY" />
<result property="inspector" column="INSPECTOR" />
<result property="totalAmount" column="TOTAL_AMOUNT" />
<result property="importNum" column="IMPORT_NUM" />
<result property="crequest" column="CREQUEST" />
<result property="customName" column="CUSTOM_NAME" />
<result property="deliveryPeriod" column="DELIVERY_PERIOD" />
<result property="shipTime" column="SHIP_TIME" />
<result property="tradeTerms" column="TRADE_TERMS" />
<result property="remark" column="REMARK" />
<result property="printStyle" column="PRINT_STYLE" />
<result property="oldState" column="OLD_STATE" />
<result property="state" column="STATE" />
<result property="outState" column="OUT_STATE" />
<result property="createBy" column="CREATE_BY" />
<result property="createDept" column="CREATE_DEPT" />
<result property="createTime" column="CREATE_TIME" />
</resultMap> <!-- 自定义查找 -->
<select id="find" parameterType="map" resultMap="contractRM">
select * from
contract_c
where 1=1
</select>
<!-- 查找一個数据 -->
<select id="get" parameterType="string" resultMap="contractRM">
select * from
contract_c where contract_id=#{pid}
</select> <!-- 增加 -->
<insert id="insert" parameterType="cn.itcast.jk.domain.Contract">
insert into
contract_c(CONTRACT_ID,OFFEROR,CONTRACT_NO,SIGNING_DATE,INPUT_BY,CHECK_BY,INSPECTOR,TOTAL_AMOUNT,IMPORT_NUM,CREQUEST,
CUSTOM_NAME,DELIVERY_PERIOD,SHIP_TIME,TRADE_TERMS,REMARK,PRINT_STYLE,OLD_STATE,STATE,OUT_STATE,CREATE_BY,CREATE_DEPT,CREATE_TIME
) values(
#{id,jdbcType=VARCHAR},
#{offeror,jdbcType=VARCHAR},
#{contractno,jdbcType=VARCHAR},
#{signingDate,jdbcType=TIMESTAMP},
#{inputBy,jdbcType=VARCHAR},
#{checkBy,jdbcType=VARCHAR},
#{inspector,jdbcType=VARCHAR},
#{totalAmount,jdbcType=DECIMAL},
#{importNum,jdbcType=INTEGER},
#{crequest,jdbcType=VARCHAR},
#{customName,jdbcType=VARCHAR},
#{deliveryPeriod,jdbcType=VARCHAR},
#{shipTime,jdbcType=TIMESTAMP},
#{tradeTerms,jdbcType=VARCHAR},
#{remark,jdbcType=VARCHAR},
#{printStyle,jdbcType=VARCHAR},
#{oldState,jdbcType=INTEGER},
#{state,jdbcType=INTEGER},
#{outState,jdbcType=INTEGER},
#{createBy,jdbcType=VARCHAR},
#{createDept,jdbcType=VARCHAR},
#{createTime,jdbcType=TIMESTAMP} ) </insert>
<!-- 通过Id刪除数据 -->
<delete id="deleteById" parameterType="string">
delete from contract_c
where id=#{pid} </delete> <!-- 刪除数据 -->
<delete id="delete" parameterType="string">
delete from contract_c where CONTRACT_ID in
<foreach collection="array" item="id" open="(" close=")"
separator=",">
#{id}
</foreach>
</delete> <!-- 更新 -->
<update id="update" parameterType="cn.itcast.jk.domain.Contract">
update contract_c
<set>
<if test="offeror!=null">OFFEROR=#{offeror,jdbcType=VARCHAR},</if>
<if test="contractno!=null">CONTRACT_NO=#{contractno,jdbcType=VARCHAR},</if>
<if test="signingDate!=null">SIGNING_DATE=#{signingDate,jdbcType=TIMESTAMP},</if>
<if test="inputBy!=null">INPUT_BY=#{inputBy,jdbcType=VARCHAR},</if>
<if test="checkBy!=null">CHECK_BY=#{checkBy,jdbcType=VARCHAR},</if>
<if test="inspector!=null">INSPECTOR=#{inspector,jdbcType=VARCHAR},</if>
<if test="totalAmount!=null">TOTAL_AMOUNT=#{totalAmount,jdbcType=DECIMAL},</if>
<if test="importNum!=null">IMPORT_NUM=#{importNum,jdbcType=INTEGER},</if>
<if test="crequest!=null">CREQUEST=#{crequest,jdbcType=VARCHAR},</if>
<if test="customName!=null">CUSTOM_NAME=#{customName,jdbcType=VARCHAR},</if>
<if test="deliveryPeriod!=null">DELIVERY_PERIOD=#{deliveryPeriod,jdbcType=VARCHAR},</if>
<if test="shipTime!=null">SHIP_TIME=#{shipTime,jdbcType=TIMESTAMP},</if>
<if test="tradeTerms!=null">TRADE_TERMS=#{tradeTerms,jdbcType=VARCHAR},</if>
<if test="remark!=null">REMARK=#{remark,jdbcType=VARCHAR},</if>
<if test="printStyle!=null">PRINT_STYLE=#{printStyle,jdbcType=VARCHAR},</if>
<if test="oldState!=null">OLD_STATE=#{oldState,jdbcType=INTEGER},</if>
<if test="state!=null">STATE=#{state,jdbcType=INTEGER},</if>
<if test="outState!=null">OUT_STATE=#{outState,jdbcType=INTEGER},</if>
<if test="createBy!=null">CREATE_BY=#{createBy,jdbcType=VARCHAR},</if>
<if test="createDept!=null">CREATE_DEPT=#{createDept,jdbcType=VARCHAR},</if>
<if test="createTime!=null">CREATE_TIME=#{createTime,jdbcType=TIMESTAMP},</if>
</set>
</update> </mapper>

Dao层的代码:

/**
* Create by 沈晓权
* Create on 2016年8月29日上午11:45:00
*/
package cn.itcast.jk.dao.impl; import java.util.Map; import org.springframework.stereotype.Repository; import cn.itcast.jk.dao.ContractDao;
import cn.itcast.jk.dao.FactoryDao;
import cn.itcast.jk.domain.Contract;
import cn.itcast.jk.domain.Factory; /*
* @Repository这注册了才能在包扫面的时候把这个实例注册进bean容器。
*
*/
@Repository
public class ContractDaoImpl extends BaseDaoImpl<Contract> implements ContractDao {
/**
*
*/
public ContractDaoImpl() {
//设置命名空间
super.setNs("cn.itcast.jk.mapper.ContractMapper");
} /* (non-Javadoc)
* @see cn.itcast.jk.dao.FactoryDao#updatestate()
*/
@Override
public void updatestate(Map map) { super.getSqlSession().update(super.getNs()+".updateState", map); }
}

Service层:ContractServicImpl.xml:

/**
* Create by 沈晓权
* Create on 2016年8月29日下午3:13:23
*/
package cn.itcast.jk.service.impl; import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import cn.itcast.jk.dao.ContractDao;
import cn.itcast.jk.domain.Contract;
import cn.itcast.jk.pagination.Page;
import cn.itcast.jk.service.ContractService; @Service
public class ContractServiceImpl implements ContractService{ @Resource
ContractDao contractdao; @Override
public List<Contract> findPage(Page page) {
return null;
} @Override
public List<Contract> find(Map paraMap) {
return contractdao.find(paraMap); } @Override
public Contract get(Serializable id) {
return contractdao.get(id);
} @Override
public void insert(Contract contract) {
contract.setId(UUID.randomUUID().toString());//设置UUID
contract.setState(0);//设置状态。默认启用,0代表草稿,默认是0;
contractdao.insert(contract); } @Override
public void update(Contract contract) {
contractdao.update(contract); } //删除一条记录
@Override
public void deleteById(Serializable id) {
contractdao.deleteById(id);
} //删除多条记录
@Override
public void delete(Serializable[] ids) {
contractdao.delete(ids);
} //启用
@Override
public void submit(Serializable[] ids) {
Map map=new HashMap();
map.put("state", 1);//1代表上報
map.put("ids",ids);
contractdao.updatestate(map); }
//停用
@Override
public void cancel(Serializable[] ids) {
Map map=new HashMap();
//这里设的两个参数都是为了后面Dao层要用的。
map.put("state", 0);//0代表草稿
map.put("ids",ids); contractdao.updatestate(map);
} }

控制层:ContractController:

package cn.itcast.jk.controller.cargo.contract;

import java.util.List;

import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import cn.itcast.jk.controller.BaseController;
import cn.itcast.jk.domain.Contract;
import cn.itcast.jk.domain.Factory;
import cn.itcast.jk.service.ContractService; @Controller
public class ContractController extends BaseController {
@Resource
ContractService contractService; //列表
@RequestMapping("/cargo/contract/list.action")
public String list(Model model)
{ List<Contract> datalist=contractService.find(null);
model.addAttribute("datalist", datalist);//将我的数据传递到页面; return "/cargo/contract/jContractList.jsp"; }
//跳转到新增的页面
@RequestMapping("/cargo/contract/tocreate.action")
public String tocreate(Factory factory )
{ return "/cargo/contract/jContractCreate.jsp"; }
//保存新增加的数据 @RequestMapping("/cargo/contract/insert.action")
public String insert(Contract contract )
{
contractService.insert(contract);
return "redirect:/cargo/contract/list.action"; } //跳转到修改的页面
//根据传入的参数id来找到要修改的Factory.
@RequestMapping("/cargo/contract/toupdate.action")
public String toupdate(String id ,Model model)
{//根据id找到一个Factory,然后把这个factory传给jsp页面,然后在页面上回显数据并做修改。
//为什么取名叫做obj呢,就是为了后续拷贝的时候少做修改。
Contract obj=contractService.get(id);
model.addAttribute("obj", obj);
return "/cargo/contract/jContractUpdate.jsp"; }
//保存新修改的数据
@RequestMapping("/cargo/contract/updatecontract.action")
public String updatecontract(Contract contract)
{
contractService.update(contract);
return "redirect:/cargo/contract/list.action"; } //删除多个
@RequestMapping("/cargo/contract/delete.action")
//@RequestParam("id")String[] ids 表示在页面上叫做id,但是我封装的时候封装成ids
//因为声明的是数组所以会自动的拆分
public String delete(@RequestParam("id")String[] ids)
{ contractService.delete(ids);
return "redirect:/cargo/contract/list.action"; } //查看
@RequestMapping("/cargo/contract/toview.action")
public String toview(String id,Model model)
{ Contract obj=contractService.get(id);
model.addAttribute("obj", obj);
return "/cargo/contract/jContractView.jsp"; }
//批量的启用
@RequestMapping("/cargo/contract/submit.action")
public String submit(@RequestParam("id")String[] ids)
{ contractService.submit(ids);
return "redirect:/cargo/contract/list.action"; } //批量的停用
@RequestMapping("/cargo/contract/stop.action")
public String stop(@RequestParam("id")String[] ids)
{
contractService.cancel(ids);
return "redirect:/cargo/contract/list.action"; } }

页面代码:

新增合同的页面:

JContractCreate.jsp:

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ include file="../../base.jsp"%>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<!-- <script type="text/javascript" src="../../js/datepicker/WdatePicker.js"></script> -->
</head>
<body>
<form method="post">
<div id="menubar">
<div id="middleMenubar">
<div id="innerMenubar">
<div id="navMenubar">
<ul>
<li id="save"><a href="#"
onclick="formSubmit('insert.action','_self');">确定</a></li>
<li id="back"><a href="list.action">返回</a></li>
</ul>
</div>
</div>
</div>
</div> <div class="textbox" id="centerTextbox"> <div class="textbox-header">
<div class="textbox-inner-header">
<div class="textbox-title">新增购销合同信息</div>
</div>
</div>
<div> <div>
<table class="commonTable" cellspacing="1">
<tr>
<td class="columnTitle_mustbe">客户名称:</td>
<td class="tableContent"><input type="text" name="customName" /></td>
<td class="columnTitle_mustbe">收购方</td>
<td class="tableContent"><input type="text" name="offeror" /></td>
</tr> <tr>
<td class="columnTitle_mustbe">合同编号:</td>
<td class="tableContent"><input type="text" name="contractno" /></td>
<td class="columnTitle_mustbe">打印版式</td>
<td class="tableContent"><input type="text" name="printStyle" /></td>
</tr>
<tr>
<td class="columnTitle_mustbe">签单日期</td>
<td class="tableContent"> <input type="text" style="width:90px;" name="signingDate"
onclick="WdatePicker({el:this,isShowOthers:true,dateFmt:'yyyy-MM-dd'});"/>
</td>
<td class="columnTitle_mustbe">重要程度</td>
<td class="tableContent"><input type="text" name="importNum" /></td>
</tr> <tr>
<td class="columnTitle_mustbe">交货日期</td>
<td class="tableContent"><input type="text" name="deliveryPeriod"
onclick="WdatePicker({el:this,isShowOthers:true,dateFmt:'yyyy-MM-dd'});"
/></td>
<td class="columnTitle_mustbe">船期</td>
<td class="tableContent"><input type="text" name="shipTime"
onclick="WdatePicker({el:this,isShowOthers:true,dateFmt:'yyyy-MM-dd'});"
/></td>
</tr>
<tr>
<td class="columnTitle_mustbe">贸易条款</td>
<td class="tableContent"><input type="text" name="tradeTerms" /></td>
<td class="columnTitle_mustbe">验货员</td>
<td class="tableContent"><input type="text" name="inspector" /></td> </tr>
<tr>
<td class="columnTitle_mustbe">制单人</td>
<td class="tableContent"><input type="text" name="inputBy" /></td>
<td class="columnTitle_mustbe">审单人</td>
<td class="tableContent"><input type="text" name="checkBy" /></td> </tr>
<tr>
<td class="columnTitle_mustbe">要求</td>
<td class="tableContent"><textarea name="crequest" style="height:120px"></textarea></td>
<td class="columnTitle_mustbe">说明</td>
<td class="tableContent"><textarea name="remark" style="height:120px"></textarea></td> </tr>
</table>
</div>
</div>
</form>
</body>
</html>

列表页面:

jContractList.jsp:

<%@ page language="java" pageEncoding="UTF-8"%>
<hr>
<font color="blue"><b>引入CSS、JS区域</b></font>
<hr> <%@ include file="../../baselist.jsp"%>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head> <body>
<form name="icform" method="post"> <div id="menubar">
<div id="middleMenubar">
<div id="innerMenubar">
<div id="navMenubar">
<ul> <hr>
<font color="blue"><b>按钮区域</b></font>
<hr> <li id="view"><a href="#" onclick="formSubmit('toview.action','_self');this.blur();">查看</a></li>
<li id="new"><a href="#" onclick="formSubmit('tocreate.action','_self');this.blur();">新增</a></li>
<li id="update"><a href="#" onclick="formSubmit('toupdate.action','_self');this.blur();">修改</a></li>
<li id="delete"><a href="#" onclick="formSubmit('delete.action','_self');this.blur();">批量删除</a></li>
<li id="delete"><a href="#" onclick="formSubmit('submit.action','_self');this.blur();">提交</a></li>
<li id="delete"><a href="#" onclick="formSubmit('cancel.action','_self');this.blur();">取消</a></li>
</ul>
</div>
</div>
</div>
</div> <!-- 页面主体部分(列表等) -->
<div class="textbox" id="centerTextbox">
<div class="textbox-header">
<div class="textbox-inner-header">
<div class="textbox-title"> <hr>
<font color="blue"><b>标题</b></font>
<hr> 购销合同列表
</div>
</div>
</div> <div> <hr>
<font color="blue"><b>列表区域</b></font>
<hr> <div class="eXtremeTable" >
<table id="ec_table" class="tableRegion" width="98%" >
<thead>
<tr>
<td class="tableHeader"><input type="checkbox" name="selid" onclick="checkAll('id',this)"></td>
<td class="tableHeader">序号</td>
<td class="tableHeader">合同号</td>
<td class="tableHeader">签单日期</td>
<td class="tableHeader">客户名称</td>
<td class="tableHeader">制单人</td>
<td class="tableHeader">审单人</td>
<td class="tableHeader">验货员</td>
<td class="tableHeader">交货期限</td>
<td class="tableHeader">船期</td>
<td class="tableHeader">走货状态</td>
<td class="tableHeader">总金额</td>
<td class="tableHeader">状态</td> </tr>
</thead>
<tbody class="tableBody" >
<!--var="o"的意思是给datalist取个别名,之后用起来就简单了-->
<c:forEach items="${datalist}" var="o" varStatus="status">
<tr class="odd" onmouseover="this.className='highlight'" onmouseout="this.className='odd'" >
<!-- 做了一个选择框 -->
<td><input type="checkbox" name="id" value="${o.id}"/></td>
<td>${status.index+1}</td>
<td><a href="toview.action?id=${o.id}">${o.contractno}</a></td>
<td>${o.signingDate}</td>
<td>${o.customName}</td>
<td>${o.inputBy}</td>
<td>${o.checkBy}</td>
<td>${o.inspector}</td>
<td>${o.deliveryPeriod}</td>
<td>${o.shipTime}</td>
<td>${o.outState}</td>
<td>${o.totalAmount}</td>
<td>
<c:if test="${o.state==1}"><font color="green">提交</font></c:if>
<c:if test="${o.state==0}">取消</c:if>
</td> </tr>
</c:forEach> </tbody>
</table>
</div> </div> </form>
</body>
</html>

更改页面:

jContractUpdate.jsp:

<%@ page language="java" pageEncoding="UTF-8" %>
<%@ include file="../../base.jsp"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script type="text/javascript" src="../../js/datepicker/WdatePicker.js"></script>
</head>
<body>
<form method="post">
<div id="menubar">
<div id="middleMenubar">
<div id="innerMenubar">
<div id="navMenubar">
<ul>
<li id="save"><a href="#"
onclick="formSubmit('insert.action','_self');">确定</a></li>
<li id="back"><a href="list.action">返回</a></li>
</ul>
</div>
</div>
</div>
</div> <div class="textbox" id="centerTextbox"> <div class="textbox-header">
<div class="textbox-inner-header">
<div class="textbox-title">新增购销合同信息</div>
</div>
</div>
<div>
<div>
<table class="commonTable" cellspacing="1">
<tr>
<td class="columnTitle_mustbe">客户名称:</td>
<td class="tableContent"><input type="text" name="customName" value="${obj.customName}" /></td>
<td class="columnTitle_mustbe">收购方</td>
<td class="tableContent"><input type="text" name="offeror" value="${obj.offeror}"/></td>
</tr> <tr>
<td class="columnTitle_mustbe">合同编号:</td>
<td class="tableContent">
<input type="text" name="contractno" value="${obj.contractno}"/>
</td> <%-- <td class="columnTitle_mustbe">打印版式</td>
<td class="tableContentAuto">
<!-- 注意这里的处理方法。用<c:if>来处理的 -->
<input type="radio" name="printStyle" value="2" class="input" <c:if test="${obj.printStyle=='2'}">checked</c:if>>两款
<input type="radio" name="printStyle" value="1" class="input" <c:if test="${obj.printStyle=='1'}">checked</c:if>>一款
</td> --%>
</tr> <tr>
<td class="columnTitle_mustbe">签单日期</td>
<td class="tableContent">
<input type="text" style="width:90px;" name="signingDate"
value="<fmt:formatDate value="${obj.deliveryPeriod}" pattern="yyyy-MM-dd"/>"
onclick="WdatePicker({el:this,isShowOthers:true,dateFmt:'yyyy-MM-dd'});" />
</td>
<td class="columnTitle_mustbe">重要程度</td>
<td class="tableContent"><input type="text" name="importNum" /></td>
</tr> <tr>
<td class="columnTitle_mustbe">交货日期</td>
<td class="tableContent"><input type="text" name="deliveryPeriod"
value="<fmt:formatDate value="${obj.deliveryPeriod}" pattern="yyyy-MM-dd"/>"
onclick="WdatePicker({el:this,isShowOthers:true,dateFmt:'yyyy-MM-dd'});"
/></td> <td class="columnTitle_mustbe">船期</td>
<td class="tableContent">
<input type="text" name="shipTime"
value="<fmt:formatDate value="${obj.shipTime}" pattern="yyyy-MM-dd"/>"
onclick="WdatePicker({el:this,isShowOthers:true,dateFmt:'yyyy-MM-dd'});"
/>
</td>
</tr> <tr>
<td class="columnTitle_mustbe">贸易条款</td>
<td class="tableContent"><input type="text" name="tradeTerms" /></td>
<td class="columnTitle_mustbe">验货员</td>
<td class="tableContent"><input type="text" name="inspector" /></td>
</tr> <tr>
<td class="columnTitle_mustbe">制单人</td>
<td class="tableContent"><input type="text" name="inputBy" /></td>
<td class="columnTitle_mustbe">审单人</td>
<td class="tableContent"><input type="text" name="checkBy" /></td>
</tr> <tr>
<td class="columnTitle_mustbe">要求</td>
<td class="tableContent"><textarea name="crequest" style="height:120px"></textarea></td>
<td class="columnTitle_mustbe">说明</td>
<td class="tableContent"><textarea name="remark" style="height:120px"></textarea></td> </tr>
</table>
</div>
</div>
</form>
</body>
</html>

预览界面:

<%@ page language="java" pageEncoding="UTF-8" %>
<%@ include file="../../base.jsp"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title> </head>
<body>
<form method="post">
<div id="menubar">
<div id="middleMenubar">
<div id="innerMenubar">
<div id="navMenubar">
<ul>
<li id="save"><a href="#"
onclick="formSubmit('insert.action','_self');">确定</a></li>
<li id="back"><a href="list.action">返回</a></li>
</ul>
</div>
</div>
</div>
</div> <div class="textbox" id="centerTextbox"> <div class="textbox-header">
<div class="textbox-inner-header">
<div class="textbox-title">新增购销合同信息</div>
</div>
</div>
<div>
<div>
<table class="commonTable" cellspacing="1">
<tr>
<td class="columnTitle_mustbe">客户名称:</td>
<td class="tableContent"><input type="text" name="customName" value="${obj.customName}" /></td>
<td class="columnTitle_mustbe">收购方</td>
<td class="tableContent"><input type="text" name="offeror" value="${obj.offeror}"/></td>
</tr> <tr>
<td class="columnTitle_mustbe">合同编号:</td>
<td class="tableContent">
<input type="text" name="contractno" value="${obj.contractno}"/>
</td> <%-- <td class="columnTitle_mustbe">打印版式</td>
<td class="tableContentAuto">
<!-- 注意这里的处理方法。用<c:if>来处理的 -->
<input type="radio" name="printStyle" value="2" class="input" <c:if test="${obj.printStyle=='2'}">checked</c:if>>两款
<input type="radio" name="printStyle" value="1" class="input" <c:if test="${obj.printStyle=='1'}">checked</c:if>>一款
</td> --%>
</tr> <tr>
<td class="columnTitle_mustbe">签单日期</td>
<td class="tableContent">
<input type="text" style="width:90px;" name="signingDate"
value="<fmt:formatDate value="${obj.deliveryPeriod}" pattern="yyyy-MM-dd"/>"
/>
</td>
<td class="columnTitle_mustbe">重要程度</td>
<td class="tableContent"><input type="text" name="importNum" /></td>
</tr> <tr>
<td class="columnTitle_mustbe">交货日期</td>
<td class="tableContent"><input type="text" name="deliveryPeriod"
value="<fmt:formatDate value="${obj.deliveryPeriod}" pattern="yyyy-MM-dd"/>" /></td> <td class="columnTitle_mustbe">船期</td>
<td class="tableContent">
<input type="text" name="shipTime"
value="<fmt:formatDate value="${obj.shipTime}" pattern="yyyy-MM-dd"/>" />
</td>
</tr> <tr>
<td class="columnTitle_mustbe">贸易条款</td>
<td class="tableContent"><input type="text" name="tradeTerms" /></td>
<td class="columnTitle_mustbe">验货员</td>
<td class="tableContent"><input type="text" name="inspector" /></td>
</tr> <tr>
<td class="columnTitle_mustbe">制单人</td>
<td class="tableContent"><input type="text" name="inputBy" /></td>
<td class="columnTitle_mustbe">审单人</td>
<td class="tableContent"><input type="text" name="checkBy" /></td>
</tr> <tr>
<td class="columnTitle_mustbe">要求</td>
<td class="tableContent"><textarea name="crequest" style="height:120px">${obj.crequest}</textarea></td>
<td class="columnTitle_mustbe">说明</td>
<td class="tableContent"><textarea name="remark" style="height:120px">${obj.remark}</textarea></td> </tr>
</table>
</div>
</div>
</form>
</body>
</html>
04-19 17:19