我有一个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“。
谢谢!
更新:让我澄清一下我想做什么。我希望根据xml文件的属性动态地生成jsf页面,例如,2个输入文本、3个复选框等,以便通过两种方法将jsf转换为jsf,一种是使用jstl,另一种是使用xslt。前者的问题是,我无法将jstl与jsf代码集成(使用jstl变量设置jsf组件属性),而使用最后一种方法,我将面临上述问题。我不想在java (UIComponents)中创建组件。有什么建议吗?
发布于 2010-10-08 16:35:48
我从来没有这样做过,但理论上,当您看到得到的XHTML输出中没有解析JSF标记时,这就意味着FacesServlet没有完成它的工作。您需要确保它是在指定的web.xml上注册的,并且请求URL (如浏览器地址栏中的)与FacesServlet的url-pattern匹配。例如,如果是*.jsf,那么您不应该通过http://example.com/page.jsp打开JSP页面,而应该通过http://example.com/page.jsf打开。
更新:说过,我从来没有这样做过,我怀疑它在理论上是否会起作用。但是,从经验中我可以看出,this answer中描述的方法是可行的。XSL应该在视图通过FacesServlet之前完成它的工作。现在你想同时做这件事。
https://stackoverflow.com/questions/3891696
复制相似问题