2009-06-17 1 views
3

Ich habe eine ungeordnete List Navigation und ich wollte dies in JSF-Code umwandeln. Eigentlich gibt es keinen JSF-Tag ..HTML in JSF umwandeln

Hier ist die raw-HTML-Navigation ist:

<ul id="navbar"> 
<li id="articles"><a href="Link1">Articles</a></li> 
<li id="topics"><a href="Link2" title="Topics">Topics</a></li> 
.... 
</ul> 

..so, was soll ich tun?

Antwort

4

Eine Möglichkeit für Ad-hoc-Templating ist die Verwendung von Facelets anstelle von JSPs. Da diese nun Teil von JSF 2.0 werden (wegen JEE6), denke ich, dass es ein guter Zeitpunkt ist, sie zu berücksichtigen.

Zum Beispiel für die Bohnen:

public class LiBean implements Serializable { 

    private static final long serialVersionUID = 1L; 

    private String href; 
    private String title; 

    public String getHref() { return href; } 

    public void setHref(String href) { this.href = href; } 

    public String getTitle() { return title; } 

    public void setTitle(String title) { this.title = title; } 

} 

... und:

public class UlBean implements Serializable { 

    private static final long serialVersionUID = 1L; 

    private final List<LiBean> listItems = new ArrayList<LiBean>(); 

    public UlBean() { 
    String[] links = { "http://www.sun.com", "Sun", 
     "http://www.oracle.com", "Oracle", 
     "http://www.ibm.com", "IBM", 
     "http://stackoverflow.com", 
     "<stackoverflow.com> & encoded output" }; 
    for (int i = 0; i < links.length; i++) { 
     LiBean item = new LiBean(); 
     item.setHref(links[i]); 
     item.setTitle(links[++i]); 
     listItems.add(item); 
    } 
    } 

    public List<LiBean> getListItems() { 
    return listItems; 
    } 

} 

... in Sitzungsbereich definiert:

<managed-bean> 
    <managed-bean-name>ulBean</managed-bean-name> 
    <managed-bean-class>beans.UlBean</managed-bean-class> 
    <managed-bean-scope>session</managed-bean-scope> 
    </managed-bean> 

... kann sein verwendet in dieser Facelet-Seite:

<?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:ui="http://java.sun.com/jsf/facelets" 
    xmlns:h="http://java.sun.com/jsf/html"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title>repeat</title> 
</head> 
<body> 
<ul> 
    <ui:repeat value="#{ulBean.listItems}" var="item"> 
    <li><a href="#{item.href}"><h:outputText 
     value="#{item.title}" /></a></li> 
    </ui:repeat> 
</ul> 
</body> 
</html> 

... diese Ausgabe zu erzeugen:

<?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"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title>repeat</title> 
</head> 
<body> 
<ul> 
    <li><a href="http://www.sun.com">Sun</a></li> 
    <li><a href="http://www.oracle.com">Oracle</a></li> 
    <li><a href="http://www.ibm.com">IBM</a></li> 
    <li><a href="http://stackoverflow.com">&lt;stackoverflow.com&gt; &amp; encoded output</a></li> 
</ul> 
</body> 
</html> 

Wenn Sie mit JSPs kleben, gibt es nichts in der Kern Implementierung, die Sie dies tun (die einzige Wiederholung Kontrolle der lässt ist dataTable). Sie können etwas in einem der 3rd party component libraries finden.

+1

Vielleicht lohnt sich hinzuzufügen, dass Facelets kein Problem mit dem Mischen von JSF-Komponenten und Standard-HTML hat (keine Notwendigkeit für f: Verbatim). Sie können die Listenelemente einfach so hinzufügen, wie sie sind, wenn Sie möchten. – Damo

+1

Nun, Sie müssen vorsichtig sein. JSF hat Probleme beim Mischen von HTML-Tags mit JSF-Tags, wenn es um Ajax-Aufrufe geht. Wir haben in der Vergangenheit viele Probleme damit erlebt. –