bingbingyihao 2024-02-23 15:34 采纳率: 100%
浏览 8
已结题

jsp在SpringMVC框架中手动设置域对象失效的场景

我在修正一个老项目的代码时遇到了struts2转SpringMVC的问题,在参数获取值并设置域对象以及手动设置域对象,这两者发生冲突时,手动设置域对象失效了;示例如下:

img

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>

关于手动设置域对象失效的解释是:当参数名称与手动改设置的域对象名称一致时,手动设置的域对象会不生效,这个问题是什么原因导致的呢,能否在框架中找到对应的代码进行解释,是否有方法可以解决该问题

  • 写回答

10条回答 默认 最新

  • 专家-百锦再@新空间代码工作室 全栈领域优质创作者 2024-02-23 16:54
    关注

    ### 问题解释当参数名称与手动设置的域对象名称一致时,手动设置的域对象会失效。这个问题可能是因为在框架中参数绑定的优先级高于手动设置的域对象,导致手动设置失效。 
    ### 可能解决方法可能的解决方法是避免参数名称与手动设置的域对象名称一致,或者通过特定的配置或注解来改变参数绑定的优先级。
    ### 举例代码在Spring MVC中,可以使用@ModelAttribute注解来指定数据绑定对象的名称,从而避免参数名称与手动设置的域对象名称一致。
    ```java@RequestMapping("/page/modifyProduct1")public String modifyProduct1(@ModelAttribute("product1") Product product) {System.out.println(product);return "jsp/modifyProduct";}

    在上面的代码中,@ModelAttribute("product1")指定了该方法参数绑定的域对象名称为"product1",避免了与参数名称冲突导致手动设置失效的问题。


    有问题你别着急,私信留言都可以,看到马上就回复,尽量及时补充齐
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(9条)

报告相同问题?

问题事件

  • 系统已结题 3月2日
  • 已采纳回答 2月23日
  • 创建了问题 2月23日

悬赏问题

  • ¥15 stc15f2k60s2单片机关于流水灯,时钟,定时器,矩阵键盘等方面的综合问题
  • ¥15 YOLOv8已有一个初步的检测模型,想利用这个模型对新的图片进行自动标注,生成labellmg可以识别的数据,再手动修改。如何操作?
  • ¥30 NIRfast软件使用指导
  • ¥20 matlab仿真问题,求功率谱密度
  • ¥15 求micropython modbus-RTU 从机的代码或库?
  • ¥15 django5安装失败
  • ¥15 Java与Hbase相关问题
  • ¥15 后缀 crn 游戏文件提取资源
  • ¥20 bash代码推送不上去 git fetch origin master #失败了
  • ¥15 LOL外服加入了反作弊系统,现在游戏录像rofl文件离线都无法打开