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
我想在这样的浏览器页面中显示结果(table):
1 2 3 4 5
100 200 300 400 500
所以我实现了 1) Controller ,2) Model 和 3)View(.jsp file).
**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) Q3、Q4 需要 var="dataNum" 和 var="data" 吗?我做对了吗?
如果我犯了错误,我很感激任何建议。
附加问题
所以我在 Aeseir 的回答后像上面一样更新了控制器代码和 jsp 文件(谢谢!!)但是我在 jsp 文件中添加了项目然后警告(Q5),当然还有页面没有介绍。
[Q5]: 警告:"items" 不支持运行时表达式
我搜索了警告,然后是检查 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>
希望对您有所帮助
您好,我是 Java 世界的新手,我正在尝试使用 Spring MVC 制作我自己的 Web 应用程序。现在,我要读取本地目录中的一个文本文件,例如,这样的文本文件:
TestData_FileOne.txt
1,100
2,200
3,300
4,400
5,500
我想在这样的浏览器页面中显示结果(table):
1 2 3 4 5
100 200 300 400 500
所以我实现了 1) Controller ,2) Model 和 3)View(.jsp file).
**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) Q3、Q4 需要 var="dataNum" 和 var="data" 吗?我做对了吗?
如果我犯了错误,我很感激任何建议。
附加问题 所以我在 Aeseir 的回答后像上面一样更新了控制器代码和 jsp 文件(谢谢!!)但是我在 jsp 文件中添加了项目然后警告(Q5),当然还有页面没有介绍。 [Q5]: 警告:"items" 不支持运行时表达式 我搜索了警告,然后是检查 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>
希望对您有所帮助