заголовок в h: голова отображается перед фазой ответа? - PullRequest
2 голосов
/ 08 июня 2011

Я пытаюсь установить значение элемента заголовка HTML (внутри элемента h: head) динамически на основе параметров представления.Я устанавливаю значение, которое будет использоваться в системном событии preRenderView.Я заметил, что EL для извлечения заголовка оценивается до того, как сработало событие preRenderView!Почему это и что я могу сделать?

Если я возьму сгенерированное значение заголовка в ah: outputText где-то на странице, оно будет отображаться, как и ожидалось.

Facelet:

<h:head>
    <title>#{myBean.title}</title>
</h:head>

Боб:

public void preRenderView(ComponentSystemEvent event) {
    title = "Person: " + firstname " " + lastname; 
}

1 Ответ

4 голосов
/ 08 июня 2011

Я не могу воспроизвести это на Мохарре 2.0.2 ~ 2.0.6 и 2.1.1.Я использовал следующий тестовый бин

@ManagedBean
@RequestScoped
public class Bean {

    private String title = "default";

    public void preRenderView(ComponentSystemEvent event) {
        title = "newtitle";
    }

    public String getTitle() {
        return title;
    }

}

и следующий вид:

<!DOCTYPE html>
<html lang="en" 
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
>
    <f:event type="preRenderView" listener="#{bean.preRenderView}" />
    <h:head>
        <title>#{bean.title}</title>
    </h:head>
    <h:body>
        <h1>Peek-a-boo</h1>
    </h:body>
</html>

А также следующий мастер-шаблон

<!DOCTYPE html>
<html lang="en"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
>
    <f:event type="preRenderView" listener="#{bean.preRenderView}" />
    <h:head>
        <title><ui:insert name="title">Default title</ui:insert></title>
    </h:head>
    <h:body>
        <ui:insert name="content">Default content</ui:insert>
    </h:body>
</html>

с этим определением

<ui:composition template="/template.xhtml"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
>
    <ui:define name="title">
        #{bean.title}
    </ui:define>
    <ui:define name="content">
        <h1>Peek-a-boo</h1>
    </ui:define>
</ui:composition>

Все работает одинаково хорошо.Название становится newtitle во всех случаях.Также не имело значения, где находится <f:event> в шаблоне.Перед головой, внутри тела, в основном шаблоне или в определении шаблона.

Возможно, проблема в том, как вы вызывали preRenderView.Приведенные выше примеры должны дать вам хороший старт для дальнейшего развития и выявления вашей реальной проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...