将out.println转换为c:out

时间:2014-01-15 16:21:11

标签: java jsp jstl

JSTL的{​​{1}} c:out版本是什么:

JSP

此后面的代码:

<% PersonController personController = new PersonController(); personController.populate(); out.println(personController.getAllPeople().get(0).getName()); %>

PersonController

List<Person> allPeople = new ArrayList<Person>(); public void populate() { Person person = new Person(); person.setName("Jeff"); allPeople.add(person); } public List<Person> getAllPeople() { return allPeople; } public void setAllPeople(List<Person> allPeople) { this.allPeople = allPeople; }

Person

2 个答案:

答案 0 :(得分:4)

你需要这个 -

<c:out value="${personController.allPeople[0].name}"/> 

答案 1 :(得分:2)

使用以下表达式:

<c:out value="${personController.allPeople[0].name }"/>

如果以下表达式不起作用,则代码中还有其他问题。我怀疑personController的实例永远不会使用setAttribute()或JSP标记绑定到请求。在代码中的某个点,personController的实例必须放在请求或会话中,以便JSP EL引用它。


使用Servlet

我构建了GitHub Gist,可能会提供一些见解。请注意,在我的servlet中,我创建了一个personController的实例,并将其添加到request。然后我转发到包含表达式的JSP,该表达式解析表达式并显示值..

PersonController pc = new PersonController();
pc.getAllPeople().add(new Person("Joe"));
pc.getAllPeople().add(new Person("John"));
request.setAttribute("personController", pc);

String nextJSP = "/index.jsp";
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(nextJSP);
dispatcher.forward(request,response);

使用JSP标记

关联personController实例的另一种方法是使用<jsp:useBean/>标记。

UseBean示例JSP

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<jsp:useBean id="personController" class="org.test.PersonController" />

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    <c:out value="${personController.allPeople[0].name }"/>
</body>
</html>

这将消除令人讨厌的scriplets,但需要您修改PersonController类,以便默认构造函数将调用populate()方法。

<强> org.test.PersonController.java

public class PersonController {

    List<Person> allPeople = new ArrayList<Person>();

    public PersonController() {
        this.populate();
    }

    public void populate() {
        Person person = new Person("Jeff");
        person.setName("Jeff");
        allPeople.add(person);
    }
    /* Omitted Accessors */
}