繁体   English   中英

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

[英]In Spring MVC - model.addAttribute usage for dynamic data and how to place the data in jsp file

嗨,我是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);中的对象感到困惑; 在第一季度,第二季度? 和addAttribute是模型属性之间的正确选择?

2)我在第3季度,第4季度需要var =“ dataNum”和var =“ data”吗,我做得正确吗?

如果我弄错了,我将不胜感激。

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

附加问题5 @taglib指令的解决方案应在jsp文件中如下所示:

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

希望能有所帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM