如何在HTML中打印使用java创建的2d数组



我正在尝试在HTML上打印一个2d数组。我正在努力学习";Spring Boot Framework;我被困在这里了。有人知道解决办法吗?在下面张贴我的代码,请帮助我。

MatrixApplication.java

package com.example.matrix;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MatrixApplication {
public static void main(String[] args) {
SpringApplication.run(MatrixApplication.class, args);
}
}

IndexController.java

package com.example.matrix.controller;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import com.example.matrix.model.Matrix;

@Controller
public class IndexController {
@GetMapping("/")
public String index() {
return "index";
}

@PostMapping("/generate")
public String matrixRegistration(@ModelAttribute Matrix matrix, Model model) {
matrix.fillArrayList();
model.addAttribute("matrix", matrix);
return "redirect:/";
}
}

Matrix.java

package com.example.matrix.model;
import java.util.Arrays;
import java.util.Random;
public class Matrix {

public String xValue;
public String yValue;
public String matrixList[][];

public Matrix() {
fillArrayList();
}
public void setMatrixList(String[][] matrixList) {
this.matrixList = matrixList;
}
public void printMatrixList() {

for(int i=0; i < Integer.parseInt(this.xValue); i++){
for(int j=0; j < Integer.parseInt(this.yValue); j++){
System.out.print(this.matrixList[i][j] + " ");
}
System.out.println("");
}
}
@Override
public String toString() {
return "Matrix [matrixList=" + Arrays.toString(matrixList) + "]";
}
public void fillArrayList() {
int xValue = Integer.parseInt(this.xValue);
int yValue = Integer.parseInt(this.yValue);
this.matrixList = new String[xValue][yValue];


Random rand = new Random(); 
for(int i=0; i < xValue; i++){
for(int j=0; j < yValue; j++){
this.matrixList[i][j] = String.valueOf(rand.nextInt(100));
}
}
}
}

index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="generate" method="post">
<label for="x">X</label>
<input type="text" name="xValue"/><br />
<label for="y">Y</label>
<input type="text" name="yValue"/> <br />
<button type="submit">Generate</button>
</form>
<table border="1" cellpadding="10">
<table border="1" cellpadding="10">
<tbody>
<tr th:each="matrix : ${matrix}">
<td th:text="${matrix.xValue}"></td>
<td th:text="${matrix.yValue}"></td>
</tr>
</table>
</table>
</body>
</html>

我犯了部分错误。我把它切成两半,因为它太长了。

java.lang.NumberFormatException: Cannot parse null string
at java.base/java.lang.Integer.parseInt(Integer.java:630) ~[na:na]
at java.base/java.lang.Integer.parseInt(Integer.java:786) ~[na:na]
at com.example.matrix.model.Matrix.fillArrayList(Matrix.java:38) ~[classes/:na]
at com.example.matrix.model.Matrix.<init>(Matrix.java:15) ~[classes/:na]
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:na]
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[na:na]
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[na:na]
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:211) ~[spring-beans-5.3.23.jar:5.3.23]
at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.constructAttribute(ModelAttributeMethodProcessor.java:247) ~[spring-web-5.3.23.jar:5.3.23]
at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.createAttribute(ModelAttributeMethodProcessor.java:220) ~[spring-web-5.3.23.jar:5.3.23]
at org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor.createAttribute(ServletModelAttributeMethodProcessor.java:85) ~[spring-webmvc-5.3.23.jar:5.3.23]
2022-10-17 20:27:10.540 ERROR 39459 --- [nio-8080-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.example.matrix.model.Matrix]: Constructor threw exception; nested exception is java.lang.NumberFormatException: Cannot parse null string] with root cause
java.lang.NumberFormatException: Cannot parse null string
at java.base/java.lang.Integer.parseInt(Integer.java:630) ~[na:na]
at java.base/java.lang.Integer.parseInt(Integer.java:786) ~[na:na]
at com.example.matrix.model.Matrix.fillArrayList(Matrix.java:38) ~[classes/:na]
at com.example.matrix.model.Matrix.<init>(Matrix.java:15) ~[classes/:na]
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:na]
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[na:na]
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[na:na]
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:211) ~[spring-beans-5.3.23.jar:5.3.23]
at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.constructAttribute(ModelAttributeMethodProcessor.java:247) ~[spring-web-5.3.23.jar:5.3.23]
at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.createAttribute(ModelAttributeMethodProcessor.java:220) ~[spring-web-5.3.23.jar:5.3.23]
at org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor.createAttribute(ServletModelAttributeMethodProcessor.java:85) ~[spring-webmvc-5.3.23.jar:5.3.23]
at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:147) ~[spring-web-5.3.23.jar:5.3.23]
at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122) ~[spring-web-5.3.23.jar:5.3.23]
at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:179) ~[spring-web-5.3.23.jar:5.3.23]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:146) ~[spring-web-5.3.23.jar:5.3.23]

感谢您的关注。行善。

基于您在提交给帖子的表单中填写了有效数据的假设。您将需要spring的标准setter(可能还有视图的getter(方法来填充您的模型实体。


<tr th:each="matrix : ${matrix}">也是有问题的,因为您以这种方式定义了两次相同的变量名。

为了防止出现这样的错误,最好在y和x变量上添加带有@NotNull的bean验证,并将控制器修改为

@PostMapping("/generate")
public String matrixRegistration(@Valid Matrix matrix, Model model, BindingResult bindingresult) 
{
if (bindingResult.hasErrors())
{
//handle errors
}
matrix.fillArrayList();
model.addAttribute("matrix", matrix);
return "redirect:/";
}

参见https://zetcode.com/spring/bindingresult/有关更多详细信息,

我自己解决了自己的问题。

<table>
<tr th:each="values :${matrixArray}">
<th:block th:each="val :${values}">
<td th:text="*{val}"></td>
</th:block>
</tr>
</table>

谢谢你的建议。它帮助很大。

最新更新