Как получить информацию из сервлета в портлет в JBoss Portal 2.5.4 - PullRequest
0 голосов
/ 20 февраля 2009

У меня есть портал, построенный на JBoss Portal 2.5.4, который должен иметь немного I18N. На странице login.jsp (которая находится на portal-server.war) мы добавили переключатель языка. Одна из ссылок на странице - к функции «Забыли пароль».

По причинам, связанным с внешним видом, страница ForgetPassword реализована в виде развернутого портлета внутри нашего портала JBoss. Но, очевидно, пользовательского объекта еще нет, поскольку не было логина.

Так как мне передать информацию о локали, которую пользователь выбирает в файле login.jsp, в файл забытого пароля jsp?

Я пробовал:

  • переменные сеанса (нет, они не пересекают войны)
  • печенье (JBoss Portal проглатывает их)
  • Параметры URL (JBoss Portal их также проглатывает)
  • System.setProperty () - к тому времени, когда они попадают в jsp ForgetPassword, они сбрасываются.

Это все работает в Windows Vista или 2003.

Есть какая-то очевидная техника, которую я пропускаю? Нужно ли просто прикусить пулю и реорганизовать мою страницу ForgetPassword как сервлет, чтобы я мог получить параметры URL?

1 Ответ

0 голосов
/ 23 февраля 2009

Хорошо, я нашел один механизм для этого - создать новое окно портлета (ForgotPasswordWindow_de) в portal-object.xml:

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

, который указывает на новый экземпляр портлета (UserMgmtPortletInstance_de) в файле portlet-instances.xml, который указывает на тот же портлет с определенным предпочтением языка.

<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>

Затем в коде портлета doView () я нахожу это предпочтение и устанавливаю атрибут.

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

    request.setAttribute("lang", lang);

Затем в jsp я смотрю на атрибут и устанавливаю локаль.

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

И для начала, на странице входа есть переключатель, и если язык немецкий, он вызывает ForgotPasswordWindow_de вместо ForgotPasswordWindow_en

...