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



嗨,我是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文件

<%@ 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) 我在第三季度、第四季度需要var="dataNum"和var="data"吗?我做得对吗?

如果我犯了错误,我很感激任何建议。

额外问题因此,在Aeseir的回答(谢谢!!)之后,我更新了控制器代码和jsp文件,就像上面一样,但在我添加了项目之后,jsp文件中出现了警告(Q5),当然,页面没有显示。[Q5]:警告:"items"不支持运行时表达式我搜索了警告,然后给出了一些建议,比如检查jstl版本-应该高于1.0版本-我的jstl版本是1.2。所以应该没什么问题你能检查我的更改部分吗?除了jstl版本之外,还有什么可能导致此警告

额外问题5的解决方案@jsp文件中的taglib指令应该是这样的:

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

这个@taglib更正+代码根据Aeseir的回答更改了上面的内容,效果很好!

Q1和Q2

你就快到了。模型将传递你输入的大部分数据。这取决于你的渲染页面来决定如何显示它。

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

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

第三季度和第四季度

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

<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>

希望对有所帮助

最新更新