2010-10-08 55 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