JSF Wypisanie kodu ze zmiennej

0

Właśnie poznaję jave pod kontem stron www. Wydaje mi się że moje pytanie jest banalne ale nie za bardzo wiem jak to powinienem poprawnie zrobić. Mam przykładowy obiekt (bean) o nazwie artContent. Zawiera on metodę getContext(), zwracającą kod html artykułu. Niestety gdy próbuję wysłać ten kod do klienta za pomocą outputText lub wyrażenia el ( #{artContext.context} ) strona wyrzuca wyjątek z informacją że zmienna zawiera otwarcie taga (symbol '<').
Jak mogę wysłać taki niemodyfikowany kod na sztywno do przeglądarki?
Czy mógłbym kazać zinterpretować kod ze zmiennej jak dokument JSF?

0

Daj kod...

0

hmmm... lekko zmieniłem i na teście wszystko działa, chyba byłem zmęczony bo małego błędu w dokumencie nie zauważyłem X]
Pozostaje jeszcze drugie pytanie jak zrobić żeby potraktował kod ze zmiennej jak dokument jsf?

package eu.pozoga.jspf.bean;

import eu.pozoga.jspf.beanCore.BeanAbstract;
import eu.pozoga.jspf.beanCore.BeanInterface;
import java.util.Set;
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;

@ManagedBean
@ApplicationScoped
public class Test
        extends BeanAbstract
        implements BeanInterface{

    public String getContext(){
        return "<h1>Is OK </h1> <h:outputText escape=\"false\" value=\"#{test.context2}\" />";
    }

    public String getContext2(){
        return "<h1>Is OK </h1>";
    }

}
<?xml version="1.0" encoding="UTF-8"?>
<ui:composition
    template="#{theme.scriptPath}"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:c="http://java.sun.com/jsp/jstl/core">

    <ui:define name="content">
        <h1>Test</h1>

        #{test.context}"
        <h:outputText value="#{test.context}" />
        <h:outputText escape="false" value="#{test.context}" />

    </ui:define>

</ui:composition>
0

Ty probojesz wyslac jakas tresc w postaci String do przegladarki i chcesz zeby ta zawartosc zostala zinerpretowana jako JSF Component ? Nigdy w ten sposob ci sie nie uda. Tak sie nie robi, tzn to jest nawet nie mozliwe. Na pewno mozesz sie bez tego egzotycznego zapisu obyc i postepowac standardowo. Musisz najpierw wiedziec co sie tam dzieje w roznych fazach JSF. Jesli zostala ta strona otwarta, poprzez GET a nie prze POST zapytanie to:

  • w pierwszej fazie RESTORE VIEW jest tworzene drzewo z komponentow ktore ty tu zdefiniowales.
  • nastepnie jSF przechodzi do ostatniej szostej fazy (pomijane sa czyli 4 fazy) RENDER RESPONSE. Dzieki EL pobierana jest zawartosc #{test.context} do komponentu h:outputtext i renduje span z ta tez zawaroscia (w przypadku jak to ma byc HTML). Nastepnie zapisywany jest stan widoku (View) wraz z drzewem komponentow i odtwarzany (jesli wywoalan zostala jakas akcja - POST) albo tworzony od nowa (GET) przy nastepnych zapytaniach.

To co ty wyslasz w getContext() nalezy do komponentu drzewa i jak ten komponent ma byc dodany do tego drzewa skoro go wysylasz jako jakas wartosc innego komponentu?

Jesli chcesz dodac cos do drzewa komponentow (a na pewno tego nie musisz robic) sprobuj zrobic to w pierwszej fazie. Powinienes teraz juz wiedziec, ze tego nie da sie zrobic w samym faceletcie. Ja bym sprobowal (jak juz bym na prawde musial) zrobic to za pomoca PhaseListener. Nie widze mimo to sensu robienia to w ten sposob, chyba ze ty znasz jakis sensowne wytlumaczenie, dlaczego chcesz tak zrobic.

0

Chciałem rozszerzyć możliwości aplikacji tworząc kilka tagów z dodatkowymi bajerami. Wydaje mi się że uproszczoną wersję tego można zrobić korzystając z xslt (choć jeszcze nigdy nie korzystałem z tego w javie), na zasadzie pobranie z bazy danych przetworzenie i zwrócenie jako wartość bean-a. W takim wypadku wartość pobrana z bean-a będzie zwykłym przetworzonym kodem html.
.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0