我有一个简单的flowcript函数可以执行此操作:
cocoon.sendPage("page/index",
{
username : "SomeName"
}
);
在我的sitemap.xmap中,我有这样的配置:
<map:pipeline internal-only="true">
<map:match pattern="page/*">
<map:generate src="xml/{1}.xml"/>
<map:transform src="xslt/html.xslt"/>
<map:serialize type="html"/>
</map:match>
</map:pipeline>
我在html.xslt文件中使用xsl:stylesheet来读取page.xml文件中的值。它简单直接(并按预期工作)。
但是:我想在page.xml文件中读取flowcript值(此处为:username),以便将其传递给html.xslt文件。这可以通过jx:template完成吗? (我发现的例子,但它们在Apache Cocoon 2.2中不能很好地工作,只有早期版本..)如果不是jx:模板的解决方案:还有什么?
答案 0 :(得分:0)
要从flowcript读取值,可以使用JX Template Generator。但与Cocoon 2.1及更早版本不同,您不应在站点地图的map:generator-section中明确引用org.apache.cocoon.generation.JXTemplateGenerator。
供将来参考,这是解决方案(使用Apache Cocoon 2.2和Maven 3.0.4):
1)确保你的pom.xml依赖于cocoon-template-impl(JXTemplateGenerator已移到这里)
<dependency>
<groupId>org.apache.cocoon</groupId>
<artifactId>cocoon-template-impl</artifactId>
<version>1.1.0</version>
</dependency>
验证您的Maven存储库是否包含库。如果没有:安装它。
2)在flowcript中:有一个函数可以设置一些值并调用.SendPage()/。SendPageAndWait()
cocoon.sendPage("page/index",
{
username : "SomeName"
}
);
3)在sitemap.xmap中:生成XML文件时,请确保它们具有 type =“jx”
<map:pipeline internal-only="true">
<map:match pattern="page/*">
<map:generate type="jx" src="xml/{1}.jx.xml"/>
<map:transform src="xslt/page.xslt"/>
<map:serialize type="html"/>
</map:match>
</map:pipeline>
4)在.jx.xml文件中:读取这样的值
<?xml version="1.0" encoding="UTF-8"?>
<jx:template xmlns:jx="http://apache.org/cocoon/templates/jx/1.0">
<valuesFromFlowscript>
<!-- Select values from flowscript -->
<username>${username}</username>
</valuesFromFlowscript>
</jx:template>
5)在你的.xslt文件中,你可以像这样读取生成的值
<xsl:value-of select="valuesFromFlowscript/username"/>