0

我有一个基于 JBoss Portal 2.5.4 构建的门户,需要一些 I18N。在 login.jsp 页面(位于 portal-server.war 中)上,我们添加了语言切换。页面上的链接之一是忘记密码工具。

出于与外观相关的原因,ForgetPassword 页面在我们的 JBoss 门户中实现为最大化的 portlet。但是,显然,还没有用户对象,因为还没有登录。

那么如何将用户在 login.jsp 上选择的语言环境信息传递到 Forget Password jsp 中呢?

我试过了:

  • 会话变量(不行,它们不会跨越战争)
  • cookie(JBoss Portal 吞下它们)
  • URL 参数(JBoss Portal 也吞下它们)
  • System.setProperty() - 当他们到达 ForgetPassword jsp 时,他们被重置了。

这一切都在 Windows Vista 或 2003 上运行。

我缺少一些明显的技术吗?我是否只需要咬紧牙关,将我的 ForgetPassword 页面重新组织为 servlet,以便获取 URL 参数?

4

1 回答 1

0

好的,我找到了一种机制来做到这一点 - 在 portal-object.xml 中创建一个新的 portlet 窗口 (ForgotPasswordWindow_de):

<window>
    <window-name>ForgotPasswordWindow_de</window-name>
    <instance-ref>UserMgmtPortletInstance_de</instance-ref>
    <region>center</region>
<height>0</height>
</window>

它指向 portlet-instances.xml 中的一个新的 portlet 实例 (UserMgmtPortletInstance_de),它指向同一个 Portlet,并定义了一个语言首选项。

<deployments>
   <deployment>
        <instance>
           <instance-id>UserMgmtPortletInstance</instance-id>
           <portlet-ref>UserMgmtPortlet</portlet-ref>
           <preferences>
            <preference>
                <name>lang</name>
                <value>en</value>
                <read-only>true</read-only>
            </preference>
           </preferences>
          <security-constraint>
              <policy-permission>     
                <unchecked/>                
                 <action-name>view</action-name>
              </policy-permission>
           </security-constraint>
        </instance>
   </deployment>
   <!-- add new deployment for UserMgmtPortletInstance_de -->
   <deployment>
        <instance>
           <instance-id>UserMgmtPortletInstance_de</instance-id>
           <portlet-ref>UserMgmtPortlet</portlet-ref>
           <preferences>
            <preference>
                <name>lang</name>
                <value>de</value>
                <read-only>true</read-only>
            </preference>
           </preferences>
          <security-constraint>
              <policy-permission>     
                <unchecked/>                
                 <action-name>view</action-name>
              </policy-permission>
           </security-constraint>
        </instance>
   </deployment>
</deployments>

然后,在 Portlet doView() 代码中,我找到了这个首选项,并设置了一个属性。

    String lang = request.getPreferences().getValue("lang", null);

    request.setAttribute("lang", lang);

然后,在 jsp 中,我查看属性,并设置语言环境。

String locale = (String) request.getAttribute("lang");

首先,登录页面有一个开关,如果语言是德语,它会调用 ForgotPasswordWindow_de 而不是 ForgotPasswordWindow_en

于 2009-02-23T15:37:46.720 回答