1,页面点击修改
<td>
<a th:href="@{/provider/} + ${p.pid}" href="view.html"><img th:src="@{/img/read.png}" alt="查看" title="查看"/></a>
<a th:href="@{/provider/} + ${p.pid}+'?type=update'" href="update.html"><img th:src="@{/img/xiugai.png}" src="../img/xiugai.png" alt="修改" title="修改"/></a>
<a href="#" class="delete" ><img th:src="@{/img/schu.png}" src="../img/schu.png" alt="删除" title="删除"/></a>
</td>
知识点:修改也是要获取到信息,所以和查看共用一个controller,添加type,跳转不同的页面。
// 查询详情和修改获取的信息
@GetMapping("/provider/{pid}")
public String view(@PathVariable("pid") Integer pid,
@RequestParam(value = "type",defaultValue = "view") String type,
Map<String,Object> map){
logger.info("查询"+pid+"的供应商详细信息");
Provider provider = providerDao.getProvider(pid);
map.put("provider",provider);
// return "provider/view";
return "provider/"+type;
}
2.获取到信息并将信息绑定到表单
<form id="updateForm" action="#" th:action="@{/provider}" th:method="post">
<!--发送put请求修改供应商信息-->
<!--1.在springMVC中配置HiddenHttpMethodFilter(springboot自动配置好了)-->
<!--2.页面创建一个method="post"表单-->
<!--3.创建一个input标签 name="_method", value="指定请求方式"-->
<input th:type="hidden" name="_method" value="put"/>
<input th:type="hidden" name="pid" th:value="${provider.pid}"/>
<!--div的class 为error是验证错误,ok是验证成功-->
<div class="">
<label for="providerName">供应商名称:</label>
<input type="text" th:value="${provider.providerName}" name="providerName" id="providerName" placeholder="测试供应商001"/>
<span >*</span>
</div>
<div>
<label for="people">联系人:</label>
<input type="text"th:value="${provider.people}" name="people" id="people" placeholder="韩露"/>
<span>*</span>
</div>
<div>
<label for="phone">联系电话:</label>
<input th:value="${provider.phone}" type="text" name="phone" id="phone" placeholder="15918230478"/>
<span></span>
</div>
<div>
<label for="address">联系地址:</label>
<input th:value="${provider.address}" type="text" name="address" id="address" placeholder="北京"/>
<span></span>
</div>
<div>
<label for="fax">传真:</label>
<input th:value="${provider.fax}" type="text" name="fax" id="fax" placeholder="15918230478"/>
<span></span>
</div>
<div>
<label for="describe">描述:</label>
<input th:value="${provider.describe}" type="text" name="describe" id="describe" placeholder="描述"/>
<span></span>
</div>
<div class="providerAddBtn">
<!--<a href="#">保存</a>-->
<!--<a href="providerList.html">返回</a>-->
<input type="button" value="保存" onclick="$('#updateForm').submit()"/>
<input type="button" value="返回" onclick="history.back(-1)"/>
</div>
</form>
知识点:绑定 th:text="${provider.people}"
put请求方式:
<form id="updateForm" action="#" th:action="@{/provider}" th:method="post"><!--发送put请求修改供应商信息-->
<!--1.在springMVC中配置HiddenHttpMethodFilter(springboot自动配置好了)-->
<!--2.页面创建一个method="post"表单-->
<!--3.创建一个input标签 name="_method", value="指定请求方式"-->
<input th:type="hidden" name="_method" value="put"/>
提交:οnclick="$('#updateForm').submit()" 前提要有id且地段上要有name
3.提交修改信息
// 修改供应商信息
@PutMapping("/provider")
public String update(Provider provider){
logger.info("更新供应商信息");
providerDao.save(provider);
return "redirect:/providers";
}
4.完整的dao
package com.cc.springboot.dao;
import com.cc.springboot.entities.Provider;
import org.springframework.stereotype.Repository;
import org.springframework.util.ObjectUtils;
import java.util.*;
@Repository
public class ProviderDao {
private static Map<Integer, Provider> providerMap = null;
private static Integer initId = 2006;
static {
providerMap = new HashMap<Integer, Provider>();
providerMap.put(2001, new Provider(2001, "PR-AA", "梦学谷供应商111", "小张", "18888666981", "深圳软件园", "0911-0123456", "品质A"));
providerMap.put(2002, new Provider(2002, "PR-BB", "梦学谷供应商222", "小李", "18888666982", "深圳软件园", "0911-0123453", "品质B"));
providerMap.put(2003, new Provider(2003, "PR-CC", "梦学谷供应商333", "小白", "18888666983", "深圳软件园", "0911-0123454", "品质C"));
providerMap.put(2004, new Provider(2004, "PR-DD", "梦学谷供应商444", "小梦", "18888666984", "深圳软件园", "0911-0123451", "品质D"));
providerMap.put(2005, new Provider(2005, "PR-EE", "梦学谷供应商555", "小谷", "18888666985", "深圳软件园", "0911-0123452", "品质E"));
}
public void save(Provider provider){
if(provider.getPid() == null){
provider.setPid(initId++);
}
provider.setCreateDate(new Date());
providerMap.put(provider.getPid(), provider);
}
public Collection<Provider> getAll(){
return providerMap.values();
}
public Collection<Provider> getAll(String providerName){
Collection<Provider> providers = getAll();
//不为空
if( !ObjectUtils.isEmpty( providerName )) {
int count = 0;
for (Provider provider: providers) {
//包含则存在
if ( provider.getProviderName().toUpperCase().contains( providerName.toUpperCase() ) ) {
count++;
//count>1 表示集合至少有一个存在的用户, 否则创建新的集合
providers = count > 1 ? providers : new ArrayList<Provider>();
providers.add(provider);
}
}
if(count==0){
providers= new ArrayList<Provider>();
}
}
return providers;
}
public Provider getProvider(Integer pid){
return providerMap.get(pid);
}
public void delete(Integer pid){
providerMap.remove(pid);
}
}
我的报错:There was an unexpected error (type=Method Not Allowed, status=405).
解决:配置文件中添加-》 spring.mvc.hiddenmethod.filter.enabled=true