2009-06-17 31 views
3

我有一个无序的List导航,我想将其转换为JSF代码。 其实,没有JSF标签..将HTML转换为JSF

这里是原始HTML导航:

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

..所以我应该怎么办?

回答

4

做特别模板的一种方法是使用Facelets而不是JSP。由于这些已成为JSF 2.0的一部分(在JEE6中提供),我认为现在是考虑它们的好时机。

例如,对于豆:

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; } 

} 

...和:

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; 
    } 

} 

...在会话范围定义:

<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> 

...可以是用于此Facelet页面:

<?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> 

......产生这种输出:

<?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> 

如果您在使用JSP坚持,没有在核心实现任何将让你这样做(唯一的重复控制是dataTable)。您可能会在3rd party component libraries中找到某种东西。

+1

也许值得补充的是,Facelets在混合JSF组件和标准HTML(不需要f:verbatim)时没有问题。如果需要,您可以直接添加列表项目。 – Damo 2009-06-18 15:15:22