0

我正在尝试为gatein-resources.xml 中的每个portlet 引用JS 脚本。https://docs.jboss.org/author/display/GTNPORTAL34/GDG-JavaScript+Resource+Management如何将它们引用到每个 portlet?我正在尝试使用 portlet 范围,但不确定如何引用它们。是按名称还是按路径?IE

在 example.jsp

<script src="<%=request.getContextPath()%>/js/lib/modules/pagination.js"></script>

在gatein-resources.xml

   <portlet>
  <name>/jsp/example.jsp</name>
  <module>
   <script>
    <name>pagination</name>
    <path>/js/lib/modules/pagination.js</path>
    </script>
  </module>
  </portlet>

编辑:

如果我只想添加所有的 javascript 资源,从哪个 portlet 使用它们,我可以像下面的代码片段一样添加它们吗?(我有多个 jsp 文件共享不同的 javascript 文件)。只是想尽量减少代码量/不确定哪个 portlet 使用哪个 jsp 文件,所以只是尝试一次添加所有这些。这些jsp文件需要添加到portlet.xml吗?我对这些 jsp 文件和 portlet.xml 中的 .xml portlet 之间的区别感到困惑。这些 jsp 文件也是 portlet 吗?对不起,我缺乏理解。

<scripts>
<name>first_resource</name> 
<script>
<name>ABC_script</name> 
<path>/abc.js</path> 
</script>
<name>second_resource</name>
<script>
<name>XYZ_script</name> 
<path>/xyz.js</path>
</script>
</scripts>

或者也可以为上面列出的所有脚本添加标签。资源: https://docs.jboss.org/author/display/GTNPORTAL34/GDG-JavaScript+Resource+Management中的共享范围

谢谢!

4

1 回答 1

0

您需要提供portlet 名称,即portlet 描述符中的名称(WEB-INF/portlet.xml)。它应该类似于以下代码段:

<?xml version="1.0" encoding="UTF-8"?>
<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" version="2.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd
    http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd">

  <portlet>
    <description xml:lang="EN">A sample portlet</description>
    <portlet-name>MyPortletName</portlet-name> <!-- This is the name to mention -->
    <display-name xml:lang="EN">My Portlet</display-name>
    <portlet-class>some.package.name.MyPortlet</portlet-class>
    <supports>
      <mime-type>text/html</mime-type>
      <portlet-mode>view</portlet-mode>
    </supports>
    <portlet-info>
      <title>Sample Portlet to showcase GateIn AMD modules</title>
    </portlet-info>
  </portlet>
</portlet-app>

然后在gatein-resources.xml文件下,您将按照您所做的方式声明您的 JS 模块,但使用portlet-name

<?xml version="1.0" encoding="ISO-8859-1" ?>
<gatein-resources
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.gatein.org/xml/ns/gatein_resources_1_5 http://www.gatein.org/xml/ns/gatein_resources_1_5"
    xmlns="http://www.gatein.org/xml/ns/gatein_resources_1_5">

  <portlet>
    <name>MyPortletName</name>
    <module>
      <script>
        <name>pagination</name>
        <path>/js/lib/modules/pagination.js</path>
      </script>
    </module>
  </portlet>

</gatein-resources>

当您的 portlet 由 portlet 容器注入时,后者会小心地调用您已声明为该 portlet 依赖项的所有必需模块 (JS),使用gatein-resources.xml(内部使用 RequireJS),即无需使用<script>元素手动调用您的脚本。就用它吧。

编辑

如果您需要有公共依赖项,当提到公共时,我们指的是portlet而不是JSP文件之间的公共,您可以声明一个公共模块并在所有需要它的 portlet 下使用它:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<gatein-resources
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.gatein.org/xml/ns/gatein_resources_1_5 http://www.gatein.org/xml/ns/gatein_resources_1_5"
    xmlns="http://www.gatein.org/xml/ns/gatein_resources_1_5">

  <portlet>
    <name>MyPortletName1</name>
    <depends>
      <module>
        <name>pagination</nam>
      </module>
    </depends>
  </portlet>

  <portlet>
    <name>MyPortletName2</name>
    <depends>
      <module>
        <name>pagination</nam>
      </module>
    </depends>
  </portlet>

  <module>
    <name>pagination</name>
    <script>
      <path>/js/lib/modules/pagination.js</path>
    </script>
  </module>

</gatein-resources>

当被portlet 容器注入时,将所有的JS 依赖注入到portlet 中,因此在这个portlet 的生命周期内返回的任何JSP 页面都会有JS 文件被注入其中。无需在 JSP 中声明任何内容,因为借助 GateIn AMD 框架,一切都在服务器端无缝完成。

于 2014-10-26T11:11:24.917 回答