【问题标题】:Friendly URL in liferay 6.1liferay 6.1 中的友好 URL
【发布时间】:2012-12-24 22:10:32
【问题描述】:

我刚刚将 blogs(default) portlet 的 url 更改为“http://localhost:8080/web/standorman/blogs/-/blogs/application-development-in-liferay

但我希望它是“http://localhost:8080/web/standorman/blogs/application-development-in-liferay

谁能建议我如何解决它??

【问题讨论】:

    标签: java url-rewriting liferay-6 friendly-url


    【解决方案1】:

    首先,如果不真正入侵 Liferay,您就无法摆脱 /-/,这是您不想做的(这会导致更多的问题而不是好处)。你可以摆脱的只是一个“博客”,以/web/standorman/-/blogs/application-development-in-liferay 之类的 URL 结尾——这对我来说似乎足够接近了。

    以下是您可以使用 yannicuLar 建议的 https://github.com/DevJonny/Liferay-6-Friendlier-Friendly-URL-Mapper/ 来执行此操作的方法。

    他的建议对您不起作用,因为您正试图更改嵌入在 Liferay 本身中的开箱即用 Liferay portlet。要改变这样的事情,必须使用 EXT 插件。所以这正是你应该做的。

    第 1 步 - 在 Plugins SDK 中创建一个 EXT 插件(通过在插件 SDK“ext”子文件夹中运行 create.bat 或 create.sh)。

    第 2 步 - 进入创建的 ext 插件文件夹,在 /docroot/WEB-INF/ext-impl/src 中删除文件 portal-ext.properties,然后将此文件 - https://github.com/DevJonny/Liferay-6-Friendlier-Friendly-URL-Mapper/blob/master/docroot/WEB-INF/src/com/mysmallcornerstudios/friendlierurlmapping/portlet/FriendlierFriendlyURLMapper.java 放入其中以使其位于路径中

    /docroot/WEB-INF/ext-impl/src/com/mysmallcornerstudios/friendlierurlmapping/portlet/FriendlierFriendlyURLMappe r.java
    

    第 3 步 - 打开文件 docroot/WEB-INF/ext-web/docroot/WEB-INF/liferay-portlet-ext.xml 用这样的内容填充它:

    <?xml version="1.0"?>
    <!DOCTYPE liferay-portlet-app PUBLIC "-//Liferay//DTD Portlet Application 6.1.0//EN" "http://www.liferay.com/dtd/liferay-portlet-app_6_1_0.dtd">
    
    <liferay-portlet-app>
    
        <portlet>
            <portlet-name>33</portlet-name>
            <icon>/html/icons/blogs.png</icon>
            <struts-path>blogs</struts-path>
            <configuration-action-class>com.liferay.portlet.blogs.action.ConfigurationActionImpl</configuration-action-class>
            <indexer-class>com.liferay.portlet.blogs.util.BlogsIndexer</indexer-class>
            <open-search-class>com.liferay.portlet.blogs.util.BlogsOpenSearchImpl</open-search-class>
            <scheduler-entry>
                <scheduler-event-listener-class>com.liferay.portlet.blogs.messaging.CheckEntryMessageListener</scheduler-event-listener-class>
                <trigger>
                    <simple>
                        <property-key>blogs.entry.check.interval</property-key>
                        <time-unit>minute</time-unit>
                    </simple>
                </trigger>
            </scheduler-entry>
            <scheduler-entry>
                <scheduler-event-listener-class>com.liferay.portlet.blogs.messaging.LinkbackMessageListener</scheduler-event-listener-class>
                <trigger>
                    <simple>
                        <property-key>blogs.linkback.job.interval</property-key>
                        <time-unit>minute</time-unit>
                    </simple>
                </trigger>
            </scheduler-entry>
            <friendly-url-mapper-class>com.mysmallcornerstudios.friendlierurlmapping.portlet.FriendlierFriendlyURLMapper</friendly-url-mapper-class>
            <friendly-url-mapping>blogs</friendly-url-mapping>
            <friendly-url-routes>com/liferay/portlet/blogs/blogs-friendly-url-routes.xml</friendly-url-routes>
            <preferences-unique-per-layout>false</preferences-unique-per-layout>
            <preferences-owned-by-group>true</preferences-owned-by-group>
            <use-default-template>false</use-default-template>
            <scopeable>true</scopeable>
            <private-request-attributes>false</private-request-attributes>
            <private-session-attributes>false</private-session-attributes>
            <render-weight>50</render-weight>
            <header-portlet-css>/html/portlet/blogs/css/main.css</header-portlet-css>
            <css-class-wrapper>portlet-blogs</css-class-wrapper>
            <add-default-resource>true</add-default-resource>
        </portlet>
    </liferay-portlet-app>
    

    此内容对于我的 Liferay 版本是正确的。对于您的版本,您可能需要执行此操作以生成类似的内容:

    • 在您的 Liferay 发行版中找到文件 liferay-portlet.xml(对于 Tomcat 捆绑发行版,应该位于 webapps/ROOT/WEB-INF 中,但可能在其他位置以防其他问题 - 只需搜索即可)
    • 在该文件中找到 &lt;portlet&gt;...&lt;/portlet&gt; 包含 &lt;portlet-name&gt;33&lt;/portlet-name&gt; 的部分
    • &lt;liferay-portlet-app&gt;&lt;!-- copied text goes here --&gt;&lt;/liferay-portlet-app&gt; 中的整个部分复制到您的EXT 插件中的上述文件docroot/WEB-INF/ext-web/docroot/WEB-INF/liferay-portlet-ext.xml
    • &lt;friendly-url-mapper-class&gt;...&lt;/friendly-url-mapper-class&gt; 行替换为&lt;friendly-url-mapper-class&gt;com.mysmallcornerstudios.friendlierurlmapping.portlet.FriendlierFriendlyURLMapper&lt;/friendly-url-mapper-class&gt;
    • 删除行

    ``

    <portlet-data-handler-class>com.liferay.portlet.blogs.lar.BlogsPortletDataHandlerImpl</portlet-data-handler-class>
    <social-activity-interpreter-class>com.liferay.portlet.blogs.social.BlogsActivityInterpreter</social-activity-interpreter-class>
    <xml-rpc-method-class>com.liferay.portlet.blogs.util.PingbackMethodImpl</xml-rpc-method-class>
    <asset-renderer-factory>com.liferay.portlet.blogs.asset.BlogsEntryAssetRendererFactory</asset-renderer-factory>
    <atom-collection-adapter>com.liferay.portlet.blogs.atom.BlogsEntryAtomCollectionAdapter</atom-collection-adapter>
    <custom-attributes-display>com.liferay.portlet.blogs.BlogsEntryCustomAttributesDisplay</custom-attributes-display>
    <workflow-handler>com.liferay.portlet.blogs.workflow.BlogsEntryWorkflowHandler</workflow-handler>
    

    第 4 步 - 部署你的 ext 插件(在它的文件夹中运行 ant 来构建它,转到 Plugins SDK 中的子文件夹“dist”,找到你的插件的 .war 文件 - 将该 .war 文件复制到 Liferay在 Liferay 发行版中“部署”文件夹)并重新启动 Liferay。

    应该可以的。

    【讨论】:

      【解决方案2】:

      在您的资源中创建一个 url-mapping.xml 文件。 在文件中添加以下条目:

      /{value} ----- 尝试不使用“/view/” 你的资源名称 2 缓存级别页面

      另外,您需要在 liferay-portlet.xml 中添加以下代码。 .....在图标之后 com.liferay.portal.kernel.portlet.DefaultFriendlyURLMapper 您的资源名称将映射您的网址 /urlMapping/你 url-mapping.xml 名称 ……

      在我的例子中,我创建了一个资源,基本上是一个超链接,上面有一个带有友好 url 的新页面。

      我希望这会有所帮助。祝你好运

      【讨论】:

        【解决方案3】:

        也许添加一个自定义的 FriendlyURL Mapper 类来禁用那个'-'前缀。你试过this 吗?

        我真的很抱歉我可以提供一个有效的例子。我给了它一个很好的尝试,因为我也对该功能感兴趣,但我担心这至少对于 liferay 6.1.0 是不可能的。看起来“/-/”对于友好的网址是必需的。我发现并提出的solution 实际上是一个 hack,我相信鉴于一些限制它可能会起作用,但即使你设法实现它,你也不能确定它适用于所有 liferay 版本。

        根据要求,我在这里发布了详细的步骤,尽管我不得不说这对我不起作用(自定义映射器在创建友好网址时抛出错误)

        1. 您应该已经使用 DefaultFriendlyURLMapper 完成了至少包含一个路由的友好映射。如果你在你的 url 中看到 '/-/' 字符,你就知道它有效。记住这个 url,稍后你会需要它来测试,因为你确信 Friendly -url 会在这条路线上起作用
        2. 创建一个扩展 DefaultFriendlyURLMapper 的自定义 MApper 类

              public class DemoCustomFriendlyUrlMapper extends DefaultFriendlyURLMapper {
          
          @Override
          public boolean isCheckMappingWithPrefix() {
          
              return false;
          }
          

        确保获取您的类限定名称(在 Eclipse 中,将鼠标悬停在类名称上时按 F2)

        1. 转到 liferay-portlet.xml 并替换

          <friendly-url-mapper-class>com.liferay.portal.kernel.portlet.DefaultFriendlyURLMapper</friendly-url-mapper-class>
          

        <friendly-url-mapper-class>com.liferay.samples.DemoCustomFriendlyUrlMapper</friendly-url-mapper-class>
        

        转到并导航到友好路由的 url,看看会发生什么。

        【讨论】:

        • 是的,我已经解决了这个问题,但它没有显示任何结果。如果可以的话,请您提供相同的完整步骤。
        • 你说“没有显示任何结果”是什么意思?你没有友好的网址?还是带有前缀的友好网址? s是否有任何运行时错误?如果您设法创建了一个正常的友好 URL,那么前缀删除非常简单......
        • 网址显示相同,前缀相同。你能给我提供这个友好网址映射的步骤吗??
        猜你喜欢
        • 2016-01-13
        • 2016-05-09
        • 2015-01-06
        • 1970-01-01
        • 1970-01-01
        • 2015-12-11
        • 2020-01-30
        • 2013-02-07
        • 2011-01-20
        相关资源
        最近更新 更多