Управляемый JSF 2.0 портлет в Websphere - как реализовать commandLinks

Я знаю, как создавать сервлеты JSF 2.0, и я знаю, как создавать портлеты, но у меня проблемы с объединением обеих технологий. Мой портлет JSF работает хорошо до тех пор, пока мне не придется вызывать методы своих компонентов поддержки через <h:commandLink />, Когда я нажимаю на эти ссылки, текущая страница перезагружается, и никакой метод не вызывается. Я думаю, что мое приложение нуждается в дополнительной настройке. Что нужно сделать, чтобы заставить команду работать так:

<h:commandLink action="#{backingBean.doSomething}" />

Обратите внимание, что я использую сервер портала WebSphere 8, который обеспечивает мост портлета JSF 2.0.

РЕДАКТИРОВАТЬ

Я вижу основной конфликт здесь:

  • API портлета отвечает за генерацию URL - генерирует действительные URL портала
  • JSF отвечает за генерацию URL - генерирует действительные JSF-URL

Мои управляемые компоненты настроены с использованием аннотаций:

@ManagedBean(name = "backingBean")
@ViewScoped
public class entryEditController
{
     public String doSomething()
     {
         return "result.xhtml";
     }
}

Это мои лица-config.xml

  <?xml version="1.0" encoding="UTF-8"?>
  <faces-config
          xmlns="http://java.sun.com/xml/ns/javaee"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
          version="2.0">
      <application>
          <view-handler>com.ibm.faces20.portlet.FaceletPortletViewHandler</view-handler>
          <el-resolver>com.ibm.faces20.portlet.PortletELResolver</el-resolver>
          <resource-handler>com.ibm.faces20.portlet.httpbridge.PortletResourceHandler</resource-handler>
      </application>
  </faces-config>

1 ответ

Решение
  1. Обновление до WAS 8.0.0.8
  2. Если ваш боб @SessionScoped или же @ViewScoped Вы должны добавить это в свой web.xml:

    <context-param>
       <param-name>org.apache.myfaces.SERIALIZE_STATE_IN_SESSION</param-name>
       <param-value>false</param-value>
    </context-param>
    
  3. Перед шагом 2 я добавил новую командную кнопку с недопустимым значением действия. Это приводит к ошибке проверки. При ошибках проверки команда не выполняется => Убедитесь, что ошибок проверки нет, например, добавив <h:messages /> к вашему шаблону
  4. Прочитайте этот ответ: /questions/512990/commandbuttoncommandlinkajax-dejstvie-metod-slushatelya-ne-vyizvan-ili-vhodnoe-znachenie-ne-ustanovleno-obnovleno/512997#512997
Другие вопросы по тегам