Преобразование HTML в JSF - PullRequest
3 голосов
/ 17 июня 2009

У меня есть неупорядоченная навигация по списку, и я хотел преобразовать ее в код 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>

.. так что мне делать?

1 Ответ

4 голосов
/ 17 июня 2009

Один из способов создания специальных шаблонов - использовать 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 ). Вы можете найти что-то в одной из сторонних библиотек компонентов .

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