【问题标题】:Transform HTML to JSF将 HTML 转换为 JSF
【发布时间】:2009-06-17 11:20:05
【问题描述】:

我有一个无序列表导航,我想将其转换为 JSF 代码。 实际上,没有 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>

..那我该怎么办?

【问题讨论】:

    标签: html jsf


    【解决方案1】:

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

    例如,对于 bean:

    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 之一中找到一些东西。

    【讨论】:

    • 也许值得补充一点,Facelets 在混合 JSF 组件和标准 HTML 方面没有问题(不需要 f:verbatim)。如果需要,您可以按原样添加列表项。
    • 嗯,你必须小心。当涉及到 Ajax 调用时,JSF 在将 HTML 标记与 JSF 标记混合时确实存在问题。过去我们遇到过很多这样的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    相关资源
    最近更新 更多