2010-10-08 35 views
0

我有一個xml文件,我想要在jsf代碼頁中進行轉換。爲此,我創建了一個xsl文件。XSLT,JSTL e JSF

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「或抑制它。

謝謝!


更新:讓我澄清一下我想做的事情。我想根據xml文件的屬性動態生成一個jsf頁面,例如,2個輸入文本,3個複選框等等。爲了轉換爲jsf,我認爲有兩種方法,一種使用jstl,另一種使用xslt。前者的問題是我無法將jstl與jsf代碼(使用jstl變量設置jsf組件屬性)以及最後一種方法集成,我正面臨上述問題。我不想在java(UIComponents)。有什麼建議麼?

回答

0

我從來沒有做過這樣的,但在理論上,當你看到在結果的XHTML輸出未解析JSF標籤,那麼它僅僅意味着FacesServlet尚未完成其工作。您需要確保它是註冊在web.xml上的指定url-pattern,並且請求URL(如在瀏覽器地址欄中)相匹配的FacesServleturl-pattern。如果是例如*.jsf,那麼你不應該通過http://example.com/page.jsphttp://example.com/page.jsf打開JSP頁面。


更新:如說,我從來沒有這樣做,如果它永遠在理論工作,我懷疑。但是,根據經驗,我可以看出this answer中描述的方法有效。在視圖通過FacesServlet之前,XSL應該已經完成​​了它的工作。現在你正試圖同時做到這一點。

+0

url模式是正確的,問題出在轉換過程中。當我試圖在bean中進行這樣的過程時,我也得到了,但我可以將其視爲一個字符串並壓制這些不需要的內容。但我無法在jsf頁面中寫入字符串的內容,並讓它在飛行中更新其內容。 – 2010-10-08 17:04:25