在带有liferay选项卡的选项卡标题中使用空格

时间:2013-05-14 15:42:17

标签: spring-mvc tabs liferay portlet

我正在使用Spring MVC来获取portlet和liferay标签。我有一个问题是在选项卡标题中添加空格。假设我想在JSP中定义类似的内容:

<liferay-ui:tabs
names="Sample Tab 1, Sample Tab 2"
refresh="false"
value="${myControllerValue}" 
>
<liferay-ui:section>
     <jsp:include page='/jsp/myPage1.jsp' flush="true"/> 
</liferay-ui:section>
<liferay-ui:section>
    <jsp:include page='/jsp/myPage2.jsp' flush="true"/> 
</liferay-ui:section>
</liferay-ui:tabs>

这根本不起作用(虽然,这正是文档中的例子),问题只是名称中的空格(如果我使用names =“tab1,tab2”,它工作正常,但那不是我的意思想要在标签标题中显示)

此外,我需要控制我从控制器显示的选项卡。像这样:

 if(whatever){
 renderrequest.setAttribute("myControllerValue", "Sample Tab 1");
 }

这会导致另一个问题,因为我需要以多种语言显示选项卡名称,因此我需要以区域设置语言传递我想要的选项卡以匹配jsp id。最好的办法是从标签ID中拆分标题并使用tabValues参数,但不知道如何做...

我读了一些关于重新定义Languages-ext.properties的内容,但我只是导入了标签,

<%@taglib prefix="liferay-ui"   uri="http://liferay.com/tld/ui" %>

所以我没有这个属性文件,也不知道如何解决它。

我真的很感激这个问题的任何帮助。

提前致谢!

编辑:

尝试应用下面发布的答案我有下一个错误:

07:26:12,297 ERROR [PortletLocalServiceImpl:542] com.liferay.portal.kernel.xml.DocumentException: Error on line 20 of document  : cvc-complex-type.2.4.a: Invalid content was found starting with element 'resource-bundle'. One of '{"http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd":portlet-info, "http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd":portlet-preferences, "http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd":security-role-ref, "http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd":supported-processing-event, "http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd":supported-publishing-event, "http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd":supported-public-render-parameter, "http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd":container-runtime-option}' is expected. 

这是我的portlet.xml文件:

<portlet-app
version="2.0"
xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd"
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>
    <portlet-name>MyAPP</portlet-name>
    <display-name>MyAPP</display-name>
    <portlet-class>org.springframework.web.portlet.DispatcherPortlet</portlet-class>
    <init-param>
        <name>contextConfigLocation</name>
        <value>/WEB-INF/portlet/MyAPP-portlet.xml</value>
    </init-param>                       
    <expiration-cache>0</expiration-cache>
    <supports>
        <mime-type>text/html</mime-type>
        <portlet-mode>VIEW</portlet-mode>
    </supports>
    <supported-locale>gl_ES</supported-locale>
    <supported-locale>es_ES</supported-locale>
    <resource-bundle>messages</resource-bundle>

    <resource-bundle>content/Language</resource-bundle>  

    <portlet-info>
        <title>MyAPP</title>
        <short-title>MyAPP</short-title>
        <keywords>MyAPP</keywords>
    </portlet-info>
</portlet>
</portlet-app>

1 个答案:

答案 0 :(得分:3)

您可以使用Language.properties在标签中包含所需的确切标题名称。

<liferay-ui:tabs>你可以拥有:

<liferay-ui:tabs
    names="sample-tab-1, sample-tab-2"
    refresh="false"
    value="${myControllerValue}" 
>

这些只是Language.properties文件中的密钥:

sample-tab-1=Sample Tab 1
sample-tab-2=Sample Tab 2

您可以将Language.properties中的portlet.xml文件定义为:

<portlet>
    ...
    ...
    <resource-bundle>content/Language</resource-bundle>
    ...
</portlet>

此文件和其他语言文件将驻留在content文件夹内的源包中,如下所示:

docroot
  |
  |--> src
        |
        |--> content
                |--> Language.properties
                |--> Language_en.properties
                |--> Language_ja.properties
                |--> Language_de.properties
                     ...

所以在你的控制器中你会使用:

if(whatever){
   renderrequest.setAttribute("myControllerValue", "sample-tab-1");
}

有关Liferay Localization的更多信息。