Я пытаюсь получить свои RequestID
или RequestURI
в JSF, как только я нажимаю кнопку.Я попробовал это:
FacesContext context = FacesContext.getCurrentInstance();
ExternalContext exContext = context.getExternalContext();
Map<String, String> x = exContext.getRequestHeaderMap();
System.out.println(x.get("request"));
System.out.println(context.getViewRoot().getViewId());
System.out.println(exContext.getRequestContextPath());
Проблема в том, что моя страница представляет собой шаблон, который перезагружает части стороны с новым XHTML.Основная сторона - home.xhtml
, и я все время получаю именно этот идентификатор.
Но мне нужен XHTML, который включен, например, view1.xhtml
(загружен в home.xhtml
).
Это возможно?Мне нужно это, чтобы сохранить запрашивающее представление в моей базе данных для моего небольшого приложения для перевода.
РЕДАКТИРОВАТЬ: Мой WebApp должен отслеживать, какое представление вызвало специальный тег перевода из моего пакета ресурсов и записать представление (view1.xthml
, а не home.xhtml
) и тег вбаза данных.Может быть, также можно получить идентификатор элемента html (но это не важно)?В каждом представлении есть несколько включений!
Пример: login.xhtml
включено в home.xhtml
<p:panel header="#{translations['titel']}">
Теперь приложение должно сохранять (login.xhtml, titel).
Спасибо!
РЕДАКТИРОВАТЬ2:
XHTML:
<?xml version='1.0' encoding='UTF-8' ?>
<!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"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<title>example</title>
<link rel="shortcut icon" type="image/x-icon"
href="#{request.contextPath}/resources/images/logo/example.ico"/>
</h:head>
<h:body>
<h:form id="menubar">
<p:menubar>
<p:submenu label="#{translations['language']}" icon="fa fa-language">
<p:menuitem value="German" action="#{language.setLocale(de)}"/>
<p:menuitem value="English" action="#{language.setLocale(en)}"/>
</p:submenu>
</p:menubar>
</h:form>
</h:body>
Face-config.xml запись для пакета ресурсов:
<resource-bundle>
<base-name>example.i18n.resourcebundle.DBResourceBundle</base-name>
<var>translations</var>
</resource-bundle>
Функция перевода-компонента:
public String test() {
FacesContext fCtx = FacesContext.getCurrentInstance();
UIComponent currentComponent = UIComponent.getCurrentComponent(fCtx);
if (null != currentComponent) {
Location location = (Location) currentComponent.getAttributes().get(UIComponent.VIEW_LOCATION_KEY);
if (null != location) {
System.out.println(location);
System.out.println(location.getPath());
return location.getPath();
}
}
return null;
}
Теперь я хочу сохранить все запросы label="#{translations['language']}"
на карте.Эта карта должна иметь « language » в качестве ключа и запрашивающий XHTML (например, « login.xhtml ») в качестве значения.Translations содержит большинство нужных мне переводов, если их нет внутри, я также хочу запись, как и раньше.
В этом случае достаточно, если запрос вызывает функцию test()
.