Ваше мнение важно для нас.
Поделитесь своими предоложениями и пожеланиями.

Подскажите, как скрыть реальный URL страницы на JSF?


Теги: java jsf url mapping
0

Ответы

0
Ссылка
Для этого нужно реализовать подкласс абстрактного класса javax.faces.ViewHandler, который и будет делать, то что нужно. А за тем зарегистрировать реализованный хендлер в faces-config.xml.

Вот пример абстрактного подкласса ViewHandler, который можно наследовать, реализовав три абстрактных метода. В абстрактные методы, которые нужно переопределить, будет происходить отображение URI в физический путь в файловой системе. Информация передается напрямую в дефолтный ViewHandler JSF для того, чтоб она обрабатывалась стандартным образом. Например, можно переопределить эти методы так, чтоб добавлять или убирать расширения файлов.
import java.io.IOException;
import java.util.Locale;

import javax.faces.FacesException;
import javax.faces.application.ViewHandler;
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
* Фасадный обработчик представлений, который отображает URI в реальное физическое
* местоположение представлений, при этом реализующий класс будет работать с ними
* стандартным образом. Таким образом, все внутренние ссылки на id представлений,
* например в faces-config, будут использовать путь к физическому расположению файлов.
* В то же время, пользователь будет видеть все "сконвертированным".
*/

public abstract class SimpleConverterViewHandler extends ViewHandler {
private static final Log LOG = LogFactory.getLog(SimpleConverterViewHandler.class);
private final ViewHandler base;

public SimpleConverterViewHandler(ViewHandler base) {
this.base = base;
}
/**
* Отделяет URI от физическиого файла отображения.
* Проверяет, правильность формата идентификатора представления - формат должен соответствовать
* физическим файлам представлений, в отличии от URIs.
* Эта проверка необходима потому, что JSF берет идентификатор представления из
* faces-config, и передает его как параметр методу renderView() и прочим.
*/

public abstract boolean isViewFormat(FacesContext context, String viewId);
/**
* Преобразует внутренний путь к файлу (view id) в пользовательский URI.
*/

public abstract String convertViewToURI(FacesContext context, String viewId);

/**
* Преобразует пользовательский URI во внутренний путь к файлу (view id).
* (uri всегда начинается с "/")
*/

public abstract String convertURIToView(FacesContext context, String uri);

public String getActionURL(FacesContext context, String viewId) {
// используется для атрибута "action" тега "form".

String newViewId = convertViewToURI(context, viewId);
LOG.debug("getViewIdPath: " + viewId + "->" + newViewId);
return base.getActionURL(context, newViewId);
}

private String doConvertURIToView(FacesContext context, String requestURI) {
if (isViewFormat(context, requestURI)) {
return requestURI;
} else {
return convertURIToView(context, requestURI);
}
}

public void renderView(FacesContext context, UIViewRoot viewToRender) throws IOException, FacesException {
if (null == context || null == viewToRender)
throw new NullPointerException("null context or view");
String requestURI = viewToRender.getViewId();
String newViewId = doConvertURIToView(context, requestURI);
LOG.debug("renderView: " + requestURI + "->" + newViewId);
viewToRender.setViewId(newViewId);
base.renderView(context, viewToRender);
}

public UIViewRoot restoreView(FacesContext context, String viewId) {
String newViewId = doConvertURIToView(context, viewId);
LOG.debug("restoreView: " + viewId + "->" + newViewId);
return base.restoreView(context, newViewId);
}

public Locale calculateLocale(FacesContext arg0) {
return base.calculateLocale(arg0);
}

public String calculateRenderKitId(FacesContext arg0) {
return base.calculateRenderKitId(arg0);
}

public UIViewRoot createView(FacesContext arg0, String arg1) {
return base.createView(arg0, arg1);
}

public String getResourceURL(FacesContext arg0, String arg1) {
return base.getResourceURL(arg0, arg1);
}

public void writeState(FacesContext arg0) throws IOException {
base.writeState(arg0);
}

}
Для того, чтоб отвечать на вопросы или зарегистрируйтесь.
ИТ-цитата
"Восьмиричная система исчисления это то же что и десятичная, если у вас не хватает двух пальцев."
Том Лерер