2010-02-17 2 views
3

У меня вопрос о повторном использовании кода в JSP. У меня есть страница JSP example.jsp, которая вызывает вызов в базу данных и получает результаты. У меня есть Java-класс HelperClass.java, который принимает запись и печатает различные поляJSP-класс помощника для печати содержимого

response.getWriter().println 

Теперь моя страница JSP имеет HTML, а также и проблема содержание распечатана вспомогательный класс появляется перед содержимым на странице JSP , Например.

<body> 
    This is the first line <br/> 
    HelperClass.printdata("second line"); 
</body> 

выход

secondline This is the first line 

Это известная проблема. Каков наилучший способ создания HelperClass для страницы JSP, которая печатает контент на странице. Любые указатели будут очень благодарны.

ответ

6

Просто не используйте «HelperClass для печати данных». Это не имеет никакого смысла. Там у вас есть EL.

${bean.property} 

Это все. Используйте сервлет для управления, препроцесса и постпроцессов. Используйте теглибы (например, JSTL) и EL для доступа и отображения данных на бэкэнд.

Вот простой пример стартового сервлета, который предварительно обрабатывает запрос до вывода на дисплей в JSP:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    List<Person> persons = personDAO.list(); // Get list of persons from DB. 
    request.setAttribute("persons", persons); // So it's available as `${persons}` in EL. 
    request.getRequestDispatcher("/WEB-INF/persons.jsp").forward(request, response); // Forward to JSP for display. 
} 

Здесь Person просто бина класс, который представляет реальную мировую сущность.

public class Person { 
    private Long id; 
    private String name; 
    private String email; 
    private Integer age; 
    // Add/generate getters and setters here. 
} 

Метод PersonDAO#list() просто возвращает List из Person объектов из БД:

public List<Person> list() throws SQLException { 
    Connection connection = null; 
    Statement statement = null; 
    ResultSet resultSet = null; 
    List<Person> persons = new ArrayList<Person>(); 

    try { 
     connection = database.getConnection(); 
     statement = connection.createStatement("SELECT id, name, email, age FROM person"); 
     resultSet = statement.executeQuery(); 
     while (resultSet.next()) { 
      Person person = new Person(); 
      person.setId(resultSet.getLong("id")); 
      person.setName(resultSet.getString("name")); 
      person.setEmail(resultSet.getString("email")); 
      person.setAge(resultSet.getInteger("age")); 
      persons.add(person); 
     } 
    } finally { 
     if (resultSet != null) try { resultSet.close(); } catch (SQLException logOrIgnore) {} 
     if (statement != null) try { statement.close(); } catch (SQLException logOrIgnore) {} 
     if (connection != null) try { connection.close(); } catch (SQLException logOrIgnore) {} 
    } 

    return persons; 
} 

Карта сервлет в web.xml на url-pattern из /persons. JSP скрыт в /WEB-INF, так что никто не может получить к нему доступ напрямую, не запрашивая сначала сервлет (иначе можно получить пустую таблицу).

Теперь, вот как persons.jsp выглядеть, он использует JSTL (только падение jstl-1.2.jar в /WEB-INF/lib) c:forEach перебрать List и использует EL для доступа к данным бэкэнда и свойства компонентов. Сервлет положил List<Person> в качестве атрибута запроса с именем persons, чтобы он был доступен ${persons} в EL. Каждая итерация в c:forEach возвращает экземпляр Person, так что вы можете отображать их proeprties с помощью EL.

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 

... 

<table> 
    <c:forEach items="${persons}" var="person"> 
     <tr> 
      <td>${person.name}</td> 
      <td>${person.email}</td> 
      <td>${person.age}</td> 
     </tr> 
    </c:forEach> 
</table> 

Назовите его http://example.com/contextname/persons. Это все. Нет необходимости в «HelperClass для печати данных»;) Чтобы узнать больше о JSTL, отметьте Java EE tutorial part II chapter 7 и, чтобы узнать больше об EL, отметьте Java EE tutorial part II chapter 5. Чтобы узнать больше о материалах за PersonDAO, отметьте this article.

+0

Спасибо за указатели. Я буду изучать JSTL и EL. Еще раз спасибо. – user275157

+0

Добро пожаловать. Если вы когда-нибудь ставите, просто «Задайте вопрос» здесь :) – BalusC