XSLT, JSTL и JSF - PullRequest
       15

XSLT, JSTL и JSF

0 голосов
/ 08 октября 2010

У меня есть XML-файл, который я хочу преобразовать в кодовую страницу jsf. Для этого я создал файл xsl.

XML:

<?xml version='1.0' encoding='ISO-8859-1'?>
<questionario xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
              xsi:noNamespaceSchemaLocation='Schema2.xsd'>
    <componente nome='input'>
         <id>input1</id>
    </componente>
    <componente nome='input'>
         <id>input2</id>
    </componente>
</questionario>

Код:

<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x" %>

<c:set var="xml" value="${questionarioXSLBean.xml}"/>

<c:set var="xsl">
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    exclude-result-prefixes="f h">

    <xsl:template match="/">
  <xsl:for-each select="questionario/componente">
   <xsl:if test="attribute::nome = 'input'">
    <xsl:variable name="id">
     <xsl:value-of select="id" />
    </xsl:variable>
    <h:inputText id="{$id}"/>
   </xsl:if>
  </xsl:for-each>

 </xsl:template>

</xsl:stylesheet>
</c:set>

<x:transform xml="${xml}" xslt="${xsl}" />

Проблема в том, что на моем экране ничего не отображается, потому что сгенерированный код для <h:inputText id="input1"/> равен <h:inputText id="input_1" xmlns:h="http://java.sun.com/jsf/html"/>, как я могу заменить xmlns: h = "http://java.sun.com/jsf/html" или подавить его.

Спасибо!


Обновление : Позвольте мне уточнить, что я хочу сделать. Я хочу динамически генерировать страницу jsf в зависимости от атрибутов xml-файла, например, 2 входных текста, 3 флажка и т. Д. Для преобразования в jsf я подумал о двух подходах: один с использованием jstl, а другой с использованием xslt. Проблема с первым заключается в том, что я не смог интегрировать jstl с кодом jsf (для установки атрибутов компонентов jsf с помощью переменных jstl), и при последнем подходе я столкнулся с проблемой, описанной выше. Я не хотел бы создавать компоненты в Java (UIComponents). Какие-либо предложения?

1 Ответ

0 голосов
/ 08 октября 2010

Я никогда не делал это так, но теоретически, когда вы видите, что JSF-теги не разбираются в результирующем выводе XHTML, это просто означает, что FacesServlet не выполнил свою работу. Необходимо убедиться, что он зарегистрирован в web.xml для указанного url-pattern и что URL-адрес запроса (как в адресной строке браузера) соответствует url-pattern из FacesServlet. Если это, например, *.jsf, то вам не следует открывать страницу JSP по http://example.com/page.jsp, а по http://example.com/page.jsf.


Обновление: как я уже говорил, я никогда не делал так, и я сомневаюсь, что это когда-нибудь сработает в теории. Однако по опыту могу сказать, что подход, описанный в , этот ответ работает. XSL должен был выполнить свою работу до того, как представление было передано через FacesServlet. Прямо сейчас вы пытаетесь сделать это одновременно.

...