要从流程脚本中读取值,您可以使用 JX 模板生成器。但与 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)在流程脚本中:有一个函数可以设置一些值并调用 .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"/>