Java: помогите мне преобразовать рабочий .jsp в некоторую нотацию XML - PullRequest
2 голосов
/ 14 мая 2010

У меня есть файл .jsp , который работает нормально.Это может быть немного особенным в том, что он вызывает фабрику ( ArticlesFactory ), которая возвращает синглтон (но это деталь) класса Articles (это происходит путем автоматической выборки общих документов Google, которые преобразованыв html и затем сохраняется в "... / text / en" , но это тоже деталь).

Следующее работает нормально: оно делает именно то, что мне нужно, оно извлекаетстатьи автоматически, и я могу получить доступ к своему Articles экземпляру штрафа.

<%@ page pageEncoding="UTF-8" contentType="text/html;charset=utf-8" %>
<%@ page import="com.domain.projectname.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en">
<head></head>
<body>

    <% Articles articles = ArticlesFactory.create( getServletContext().getRealPath( "text/en" )); %>
    We have <%= articles.getNbItems()%>

</body>
</html>

Однако я должен преобразовать его в некоторые обозначения, которые я не знаю и не понимаю, я даже не уверен, какое название длято есть и, очевидно, у меня есть какая-то проблема.

Я не знаю, является ли это проблемой с пространством имен или есть проблема с фабричным методом фабрики ArticlesFactory, создающим Articles singleton:

<?xml version="1.0" encoding="UTF-8"?>
<jsp:root version="2.0" xmlns:jsp="http://java.sun.com/JSP/Page"
    xmlns:c="urn:jsptld:http://java.sun.com/jsp/jstl/core">
<jsp:directive.page import="com.domain.project.ArticlesFactory"/>
<jsp:directive.page contentType="text/html; charset=UTF-8" />

We have ${variable.nbItems}  <!-- What to put here !? -->

</jsp:root>

Я пробовал много вещей и не мог понять.

В основном мне нужно: - вызвать статический create метод из класса ArticlesFactory - передать егорезультат getServletContext (). getRealPath ("text / en"))

(который должен вернуть экземпляр Articles)

  • , затем я хочу поставить результат getNbItems () в переменной, которую я хочу отобразить

Обратите внимание, что мне не нужно вызывать getServletContext из любого сервлета / диспетчера: я хочу сделать это так же, как впервый рабочий пример (т. е. непосредственно из .jsp).

1 Ответ

2 голосов
/ 14 мая 2010

Вы в основном ищете "JSP в синтаксисе XML" . Большинство из них уже объяснено в этом (старом) уроке . Вам еще нужно заменить <% %> на <jsp:scriptlet> и <%= %> на <jsp:expression>.

Пространство имен xmlns:c, кстати, здесь не нужно, если только вы не хотите использовать какие-либо из основных JSTL тегов.

Язык выражений (те ${} вещи), который объясняется в этом (также старом) уроке , кстати, является отдельным предметом. Он действует только на объекты в области страницы, запроса, сеанса или приложения. Однако в скриптлетах переменные определены только в локальных областях (на самом деле это метод localloc), а в EL они недоступны. Чтобы сделать его доступным в EL, вам нужно будет сделать следующее в скриптлете:

pageContext.setAttribute("articles", articles); // Put in page scope (recommended).
request.setAttribute("articles", articles); // Or in request scope. Also accessible by any include files.
session.setAttribute("articles", articles); // Or in session scope. Accessible by all requests in same session.
application.setAttribute("articles", articles); // Or in application scope. Accessible by all sessions.

Таким образом, он доступен по ${articles} в EL.

...