我在修正一个老项目的代码时遇到了struts2转SpringMVC的问题,在参数获取值并设置域对象以及手动设置域对象,这两者发生冲突时,手动设置域对象失效了;示例如下:
Controller代码
package com.bbyh.controller;
import com.bbyh.entity.Product;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Map;
/**
* @author bbyh
* @date 2023/7/27 0027 18:56
* @description
*/
@Controller
@RequestMapping
public class PageController {
@RequestMapping("/page/parent")
public String parent(HttpServletRequest request) {
request.setAttribute("username", "BBYH");
return "jsp/parent";
}
@RequestMapping("/page/modifyProduct1")
public String modifyProduct1(HttpServletRequest request, Product product) {
System.out.println(product);
return "jsp/modifyProduct";
}
@RequestMapping("/page/modifyProduct2")
public String modifyProduct2(HttpServletRequest request, Product product) {
System.out.println(product);
product.setProductId("001");
product.setProductName("苹果");
product.setProductDesc("好吃的苹果");
return "jsp/modifyProduct";
}
@RequestMapping("/page/modifyProduct3")
public String modifyProduct3(HttpServletRequest request, Product product) {
System.out.println(product);
request.setAttribute("product", product);
return "jsp/modifyProduct";
}
@RequestMapping("/page/modifyProduct4")
public String modifyProduct4(HttpServletRequest request, Product product) {
System.out.println(product);
product.setProductId("001");
product.setProductName("苹果");
product.setProductDesc("好吃的苹果");
request.setAttribute("product", product);
return "jsp/modifyProduct";
}
@RequestMapping("/page/modifyProduct5")
public String modifyProduct5(HttpServletRequest request, Product product) {
product = new Product();
System.out.println(product);
return "jsp/modifyProduct";
}
@RequestMapping("/page/modifyProduct6")
public String modifyProduct6(HttpServletRequest request, Product product) {
System.out.println(product);
product = new Product();
product.setProductId("001");
product.setProductName("苹果");
product.setProductDesc("好吃的苹果");
return "jsp/modifyProduct";
}
@RequestMapping("/page/modifyProduct7")
public String modifyProduct7(HttpServletRequest request, Product product) {
product = new Product();
System.out.println(product);
request.setAttribute("product", product);
return "jsp/modifyProduct";
}
@RequestMapping("/page/modifyProduct8")
public String modifyProduct8(HttpServletRequest request, Product product) {
System.out.println(product);
Product product1 = new Product();
product1.setProductId("001");
product1.setProductName("苹果");
product1.setProductDesc("好吃的苹果");
request.setAttribute("product", product1);
return "jsp/modifyProduct";
}
@RequestMapping("/page/modifyProduct9")
public String modifyProduct9() {
return "jsp/modifyProduct";
}
}
jsp代码
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<html>
<head>
<title>父页面</title>
</head>
<body>
<h1>父页面</h1>
<br>
获取到的参数 username: ${username}
<form action="/page/modifyProduct1" name="product">
<h4>1、方法参数接收不赋值不返回</h4>
产品编号:<input type="text" name="productId"><br>
产品名称:<input type="text" name="productName"><br>
产品描述:<input type="text" name="productDesc"><br>
<input type="submit" value="提交">
</form>
<form action="/page/modifyProduct2" name="product">
<h4>2、方法参数接收并赋值不返回</h4>
产品编号:<input type="text" name="productId"><br>
产品名称:<input type="text" name="productName"><br>
产品描述:<input type="text" name="productDesc"><br>
<input type="submit" value="提交">
</form>
<form action="/page/modifyProduct3" name="product">
<h4>3、方法参数接收不赋值返回</h4>
产品编号:<input type="text" name="productId"><br>
产品名称:<input type="text" name="productName"><br>
产品描述:<input type="text" name="productDesc"><br>
<input type="submit" value="提交">
</form>
<form action="/page/modifyProduct4" name="product">
<h4>4、方法参数接收并赋值返回</h4>
产品编号:<input type="text" name="productId"><br>
产品名称:<input type="text" name="productName"><br>
产品描述:<input type="text" name="productDesc"><br>
<input type="submit" value="提交">
</form>
<form action="/page/modifyProduct5" name="product">
<h4>5、方法参数接收同时创建新成员同时不赋值不返回</h4>
产品编号:<input type="text" name="productId"><br>
产品名称:<input type="text" name="productName"><br>
产品描述:<input type="text" name="productDesc"><br>
<input type="submit" value="提交">
</form>
<form action="/page/modifyProduct6" name="product">
<h4>6、方法参数接收同时创建新成员并赋值不返回</h4>
产品编号:<input type="text" name="productId"><br>
产品名称:<input type="text" name="productName"><br>
产品描述:<input type="text" name="productDesc"><br>
<input type="submit" value="提交">
</form>
<form action="/page/modifyProduct7" name="product">
<h4>7、方法参数接收同时创建新成员同时不赋值返回</h4>
产品编号:<input type="text" name="productId"><br>
产品名称:<input type="text" name="productName"><br>
产品描述:<input type="text" name="productDesc"><br>
<input type="submit" value="提交">
</form>
<form action="/page/modifyProduct8" name="product">
<h4>8、方法参数接收同时创建新成员并赋值返回</h4>
产品编号:<input type="text" name="productId"><br>
产品名称:<input type="text" name="productName"><br>
产品描述:<input type="text" name="productDesc"><br>
<input type="submit" value="提交">
</form>
<form action="/page/modifyProduct9" name="product">
<h4>9、不使用方法参数接收不返回</h4>
产品编号:<input type="text" name="productId"><br>
产品名称:<input type="text" name="productName"><br>
产品描述:<input type="text" name="productDesc"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
关于手动设置域对象失效的解释是:当参数名称与手动改设置的域对象名称一致时,手动设置的域对象会不生效,这个问题是什么原因导致的呢,能否在框架中找到对应的代码进行解释,是否有方法可以解决该问题