Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSP在java文件中未使用getter和setter时给出错误_Java_Jsp - Fatal编程技术网

JSP在java文件中未使用getter和setter时给出错误

JSP在java文件中未使用getter和setter时给出错误,java,jsp,Java,Jsp,在我的java代码中 package com.luv2code.jsp.tagdemo; public class Student { public String firstName; public String lastName; public boolean goldCustomer; public Student(String firstName, String lastName, boolean goldCustomer) { super(

在我的java代码中

package com.luv2code.jsp.tagdemo;
public class Student {
    public String firstName;
    public String lastName;
    public boolean goldCustomer;
    public Student(String firstName, String lastName, boolean goldCustomer) {
        super();
        this.firstName = firstName;
        this.lastName = lastName;
        this.goldCustomer = goldCustomer;
    }
    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    public boolean isGoldCustomer() {
        return goldCustomer;
    }
    public void setGoldCustomer(boolean goldCustomer) {
        this.goldCustomer = goldCustomer;
    }

}
在JSP代码中

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page import="java.util.*,com.luv2code.jsp.tagdemo.Student" %>
<%
    ArrayList<Student> data=new ArrayList<>();
    data.add(new Student("Subhajit","Maity",true));
    data.add(new Student("Biswajit","Kundu",true));
    data.add(new Student("Sourav","Das",false));
    pageContext.setAttribute("myStudent", data);
%>

<html>
<head>
</head>
<body>
<c:forEach var="tempStudent" items="${myStudent}">
    ${tempStudent.firstName}
</c:forEach>

</body>
</html>

${tempstuent.firstName}

如果我使用getter和setter方法来设置和获取名字,lastname和goldcustomer然后代码工作正常。但是如果没有getter和setter,它会出现错误。如果我将类变量声明为public,那么它可以在任何地方访问,那么我应该使用getter和setter吗?

JSP/Servlet引擎是按照一些基本原则设计的。这些原则中包括封装,您永远不应该授予对类属性的直接访问权。 编译jsp时,EL表达式${tempstuent.firstName}将类似于com.luv2code.jsp.tagdemo.Student.getFirstName(),假设您遵循封装原则


这是规范的一部分,您无法更改此行为。

getter和setter是很好的封装工具。这些方法除了其主要目的外,还可能包含一些逻辑。您可能需要检查getter和setter是否应该是可执行的,并且您可能需要做一些不同的事情。例如,如果设置丈夫的姓氏,则可能还需要设置个人的姓氏。如果只设置公共数据成员的值,则无法执行此操作。

您需要遵循使用JSP页面的封装规则。在jsp中,可以调用以get开头的任何内容

public String getAnyString() {
        return "Any String";
    }
您可以将其调用到JSP页面。它不寻找你的变量,而是寻找你封装的方法

对于可读属性,将有一个getter方法来读取 属性值。对于可写属性,将有一个setter方法 以允许更新属性值。因此,即使在脚本 writer在诸如“b.Label=foo”之类的内容中键入,仍然存在 方法调用目标对象以设置属性,并 对象具有完全的编程控制因此属性不必只是 简单的数据字段,它们实际上可以是计算值。可能会更新 有各种各样的副作用


中,JSP页面使用两种语言(除了HTML和JSP标记)

1-Java

靠近顶部的代码是常规Java:

ArrayList<Student> data=new ArrayList<>();
data.add(new Student("Subhajit","Maity",true));
2-表达语言

这样的标记和像
${tempstuent.firstName}
这样的表达式不使用Java,而是使用JavaEE的。它被设计成一种简单的脚本语言

根据规范,表达式
${tempstuent.firstName}
访问JavaBean tempStudent的属性firstName。JavaBean基本上是符合某些规则的任何Java对象。特别是,getter和setter方法成为属性

根据第7.1章:

属性总是通过其所属对象的方法调用进行访问 反对


这就是为什么它不能只处理字段,而需要getter和setter。

您会遇到什么错误?
Student student = ...;
student.lastName = "Maity";