JSP在java文件中未使用getter和setter时给出错误
在我的java代码中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(
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";