0

我有一个简单的流程图函数可以做到这一点:

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 文件中的流脚本值(此处为:用户名),以便将其传递给 html.xslt 文件。这可以通过 jx:template 来完成吗?(我发现的示例使用它,但它们在 Apache Cocoon 2.2 中效果不佳,仅在早期版本中运行。)如果不是 jx:template 的解决方案:还有什么?

4

1 回答 1

0

要从流程脚本中读取值,您可以使用 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"/>
于 2013-10-23T18:20:37.363 回答