我正在阅读一本书中的JSP教程并且遇到一个难以理解的程序。
它有两个bean,一个是Message.java,另一个是MessageServies.java,如下所示。
package com.jeecourse.model;
public class Message {
private String name;
private String text;
public Message() {
}
public Message(String name, String text) {
this.name = name;
this.text = text;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
和MessageService.java
package com.jeecourse.model;
public class MessageService {
private Message[] fakeMessages;
public MessageService() {
fakeMessages = new Message[3];
fakeMessages[0] = new Message("Jimmy", "Jimmy's message!");
fakeMessages[1] = new Message("Jack", "Jack's message!");
fakeMessages[2] = new Message("Tom", "Tom's message!");
}
public Message[] getMessages() {
return fakeMessages;
}
}
最后是带有EL的message.jsp:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<jsp:useBean id="messageService" class="com.jeecourse.model.MessageService"/>
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<title>NoteBook</title>
</head>
<body>
<table style="text-align: left; width: 100%;" border="1">
<tr>
<td>Name</td><td>Message</td>
</tr>
<c: forEach var="message" items="${messageService.messages}">
<tr>
<td>${message.name}</td><td>${message.text}</td>
</tr>
</c: forEach>
</table>
</body>
</html>
请注意,它在EL表达式中使用messageService.messages。很奇怪,messageService既没有这样的成员,也没有这样的功能。但它可以工作。为什么呢?
答案 0 :(得分:0)
当您编写${messageService.messages}
时,它会在编译时转换为messageService.getMessages
。就像${message.text}
实际调用message.getText()
一样。
对于这种&#34;魔法&#34;在命名方法时遵循一些约定很重要。如果没有,编译器就不知道在使用缩写版本时应该调用哪个方法。
您可以在此处查看有关EL的更多信息:https://stackoverflow.com/tags/el/info 此功能位于页面顶部。