首页 文章

在Spring MVC中 - 对动态数据的model.addAttribute用法以及如何将数据放在jsp文件中

提问于
浏览
0

嗨,我是Java世界的新手,我正在尝试使用Spring MVC创建自己的Web应用程序 . 现在,我将在本地目录中读取一个文本文件,例如,文本文件如下:

TestData_FileOne.txt
1,100
2,200
3,300
4,400
5,500

结果我想在这样的浏览器页面中显示(在表格中):

1   2   3   4   5
100 200 300 400 500

所以我实现了1)Controller,2)Model,以及3)View(.jsp文件) .

** 1)我的控制器和2)型号([Q1] [Q2])**

@Controller
public class TestController {

   @RequestMapping("/testMVC")
   public String testmvc(Model model){
       String dirString = "C:/Users/Me/Documents/Test/";
       Path testFile;
       List<String> testData;

       testFile = Paths.get( dirString + "TestData_FileOne.txt");

       try {    
           testData = Files.readAllLines(testFile, StandardCharsets.UTF_8);
       } catch (IOException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
           //return "unable to read...";
           return "unable to read...";
       }

       // ====== changes from here based on Aeseir's answer========
       List<String> dataNum = new ArrayList<String>();
       List<String> data = new ArrayList<String>();
       for(int i=0; i<testData.size()-1;i++){
           dataNum.add(testData.get(i).split(",")[0]);
           data.add(testData.get(i).split(",")[1]);
       }
       model.addAttribute("dataNum", dataNum);
       model.addAttribute("data", data);
       // ======= changes until here ==============

       return "testMVC";   
    }
  }

(当我检查System.out.println部分时,读取文本文件工作正常)

2) testMVC.jsp file

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>

<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>  

<table>
<thread>
  <tr>
    <th>Table with dynamic data from model</th>
  </tr>
</thread>
<tbody>
  <c:forEach var="dataNumValue" items="${dataNum}"> [items added but.. Q5]
    <tr>
      <td>
             ${dataNumValue}
      </td>
    </tr>
  </c:forEach>
  <c:forEach var="dataValue" items="${data}"> [items added but.. Q5]
    <tr>
      <td>
             ${dataValue}       --- [Q2']
     </td>
    </tr>
  </c:forEach>
</tbody>
</table>

所以..我知道Q1 / Q1'应该匹配,Q2 / Q2'也是如此 .

1)但是,我对model.addAttribute(“”,object)中的对象感到困惑;在Q1,Q2?和addAttribute是模型属性中的正确选择?

2)在Q3,Q4中我是否需要var =“dataNum”和var =“data”并且我做得对吗?

如果我弄错了,我会感激任何建议 .

Extra Question 所以我已经更新控制器代码和JSP文件中像Aeseir的回答后,上述(谢谢!),但之后我添加的项目则警告(Q5),当然,该页面没有出现我在JSP文件中的警告 . [Q5]: warning : "items" does not support runtime expressions 我搜索了警告,然后检查jstl版本的建议 - 应该高于版本1.0 - My jstl version is 1.2. so shouldn't be any problem.... Can you check my changes part? and What else could cause this warning except jstl version? .

Solution for extra question 5 @taglib指令在jsp文件中应该是这样的:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> => / jsp在中间缺失

这个@taglib校正码基于Aeseir的答案改变了上面的答案一切正常!

1 回答

  • 3

    Q1和Q2

    你快到了 . 模型将传递您放入其中的大部分数据 . 它取决于您的渲染页面,以确定如何显示它 .

    您需要将类型更改为数组,因为您要输出多个字符串 .

    List<String> dataNum = //populate accordingly
    List<String> data = // populate accoridngly
    
    model.addAttribute("dataNum", dataNum);
    model.addAttribute("data", data);
    

    Q3和Q4

    是的,但你需要这样完成它:

    <c:forEach var="dataNumValue" items="${dataNum}">   
        <tr>
          <td>
                 ${dataNumValue}    
          </td>
        </tr>
      </c:forEach>
      <c:forEach var="dataValue" items=${data}>     
        <tr>
          <td>
                 ${dataValue}       
         </td>
        </tr>
      </c:forEach>
    

    希望有所帮助

相关问题