当前位置: 首页 > 知识库问答 >
问题:

在Spring MVC中显示来自控制器的视图(所有雇员的列表)

白吕恭
2023-03-14

试图简单地从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列

共有1个答案

盛嘉
2023-03-14

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,并根据登录的用户显示记录。 我分配给变量