试图简单地从Spring中的控制器输出一个视图报告中所有雇员的列表。得到一个与Freemarker有关的错误,不确定如何解决。
相关类别:
java模型
package mvc_course.models;
import java.util.HashSet;
import java.util.Set;
public class Employee {
int employee_number;
String employee_name;
String address;
String ni_number;
String iban_number;
double starting_salary;
int employee_type_id;
int commission_rate;
int total_sales;
public static Set<Employee> employeeList = new HashSet<Employee>();
public Employee(String name, String address, String nin, String iban, double salary) {
this.employee_name = name;
this.address = address;
this.ni_number = nin;
this.iban_number = iban;
this.starting_salary = salary;
}
public int getEmployee_number() {
return employee_number;
}
public void setEmployee_number(int employee_number) {
this.employee_number = employee_number;
}
public String getEmployee_name() {
return employee_name;
}
public void setEmployee_name(String employee_name) {
this.employee_name = employee_name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getNi_number() {
return ni_number;
}
public void setNi_number(String ni_number) {
this.ni_number = ni_number;
}
public String getIban_number() {
return iban_number;
}
public void setIban_number(String iban_number) {
this.iban_number = iban_number;
}
public double getStarting_salary() {
return starting_salary;
}
public void setStarting_salary(double starting_salary) {
this.starting_salary = starting_salary;
}
public int getEmployee_type_id() {
return employee_type_id;
}
public void setEmployee_type_id(int employee_type_id) {
this.employee_type_id = employee_type_id;
}
public int getCommission_rate() {
return commission_rate;
}
public void setCommission_rate(int commission_rate) {
this.commission_rate = commission_rate;
}
public int getTotal_sales() {
return total_sales;
}
public void setTotal_sales(int total_sales) {
this.total_sales = total_sales;
}
}
ReportController.java
package mvc_course.controllers;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import mvc_course.models.Employee;
@Controller
public class ReportController {
@Autowired
private DataSource dataSource;
@RequestMapping(value="showEmployees.mvc")
public String showEmployees(Model m){
List<Employee> employees = new ArrayList<Employee>();
try{
Connection c = dataSource.getConnection();
Statement s = c.createStatement();
String sql = "SELECT * FROM Employees";
ResultSet rs = s.executeQuery(sql);
List<String[]>rows = new ArrayList<String[]>();
while(rs.next()){
String[] row = {
rs.getString(1),
rs.getString(2),
rs.getString(3),
rs.getString(4),
rs.getString(5),
rs.getString(6)};
rows.add(row);
}
for (String[] row : rows) {
Employee e = new Employee(row[1], row[2], row[3], row[4], Double.parseDouble(row[5]));
employees.add(e);
System.out.println();
for (String string : row) {
System.out.print(string + " ");
}
}
m.addAttribute("employees");
}catch (Exception e){
System.out.println(e.getMessage());
}
return "EmployeesPerBuReport";
}
}
**EmployeeReport.ftl**
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Employees per BU</title>
<!-- Compiled and minified CSS -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.7/css/materialize.min.css">
<!-- Compiled and minified JavaScript -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.7/js/materialize.min.js"></script>
</head>
<body>
<h1>Employees</h1>
<table>
<thead>
<tr>
<th>Name</th>
<th>Address</th>
<th>National Insurance Number</th>
<th>Bank Account Number</th>
<th>Starting Salary</th>
</tr>
</thead>
<tbody>
<#list employees as employee>
<tr>
<td>${employee.getName}</td>
<td>${employee.getAddress}</td>
<td>${employee.getNi_number}</td>
<td>${employee.getIban_number}</td>
<td>${employee.getStarting_salary}</td>
</tr>
</#list>
</tbody>
</table>
</body>
</body>
</html>
错误:
FreeMarker模板错误(调试模式;在生产中使用RETHROW!):以下内容的计算结果为null或缺少:==>Employee.getname[在template“EmployeesPerBureport.ftl”中,第31行,第39列]----提示:导致此错误的是最后一个点之后的步骤,而不是之前的步骤。----提示:如果已知失败的表达式在法律上引用了有时为null或缺少的内容,可以指定默认值,如myoptionalvar!mydefault,或者使用<#If myoptionalvar??>when-present<#else>when-missing。(这些仅覆盖表达式的最后一步;要覆盖整个表达式,请使用括号:(myoptionalvar.foo)!mydefault,(myoptionalvar.foo)??-------FTL堆栈跟踪(“~”表示与嵌套相关):-Failed at:${employee.getname}[在模板“employeesperbureport.FTL”第31行,第37列
在Employee
类中没有getname()
方法,只有getemployee_name()
(一个非常奇怪的名称)。修复后,您将得到一个不同的错误,如果您编写${employee.name}
而不是${employee.getname}
就可以修复这个错误。
问题内容: 我有一个非标准的Spring MVC项目。用XML响应。是否可以创建一个视图(jsp页面),以显示所有接受的(不是必需的)控制器,映射和参数。 根据答案,我有: 我没有得到任何信息 问题答案: 随着Spring 3.1,你可以轻松浏览端点。 The controller : The view : 你也可以在Spring <3.1中使用代替。但是你不会获得相同级别的信息。 有了它们,你将
问题内容: 在WWDC 2019上,Apple宣布了一种新的“卡式”外观模态演示,并带有内置手势,可通过向下滑动卡来消除模态视图控制器。他们还引入了新属性,以便您可以选择拒绝这种解雇行为。 但是到目前为止,我还没有找到在SwiftUI中模拟这种行为的方法。使用,不,据我所知,让你以同样的方式禁止解雇手势。我还尝试将模式视图控制器放在内 ,但这似乎也无济于事: 即使出现了,我仍然可以向下滑动以消除视
我在hibernate中从查询中获取信息时遇到问题。在我的类dao中,有这样一个函数。 我将List传递给视图,并在jsp中使用c: foreach查看结果,但我只有像Ljava.lang.对象这样的结果;@1659f66 我在MySQL中的查询是 结果就像 ?如何在视图中获取查询中每列的数据?
场景:用户点击视图控制器上的按钮。视图控制器是导航堆栈中的最顶层(显然)。tap调用在另一个类上调用的实用程序类方法。那里发生了一件坏事,我想在控件返回视图控制器之前在那里显示一个警报。 这在中是可能的(但可能不太合适)。 在这种情况下,您如何呈现一个,就在中?
比方说,我有一个名为VC2的视图控制器类的实例。在VC2中,有一个“cancel”(取消)按钮会自动关闭。但当“取消”按钮触发时,我无法检测或接收任何回调。VC2是一个黑匣子。 视图控制器(称为VC1)将使用呈现视图控制器:动画:完成方法呈现VC2。 VC1在VC2被解除时必须检测哪些选项? 编辑:从@rory mckinnel的评论和@NicolasMiari的回答中,我尝试了以下方法: 在VC
我在显示管理视图时遇到一个小问题。我搜索了一下,但没有找到好的解决办法。我有一个会议桌,它存储两个不同用户的ID,并根据登录的用户显示记录。 我分配给变量