Websphere中的JSF 2.0驱动的portlet - 如何实现commandLinks

时间:2014-06-16 07:29:26

标签: jsf jsf-2 portlet websphere-portal portletbridge

我知道如何创建JSF 2.0 servlet,我知道如何创建portlet,但我在组合这两种技术时遇到了问题。我的JSF portlet运行良好,直到我必须通过<h:commandLink />调用我的支持bean的方法。当我单击这些链接时,将重新加载当前页面,并且不会调用任何方法。我认为我的应用需要一些额外的配置。为了使这样的命令链接起作用,需要做些什么:

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

请注意,我正在使用提供JSF 2.0 portlet桥的WebSphere 8门户服务器。

修改

我在这里看到了一个基本的冲突:

  • portlet API负责生成URL - 生成有效的portal-URLs
  • JSF负责生成URL - 生成有效的JSF-URL

我的托管bean使用注释进行配置:

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

这是我的faces-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 个答案:

答案 0 :(得分:0)

  1. 更新至WAS 8.0.0.8
  2. 如果您的bean是@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步之前,我添加了一个带有无效操作值的新命令按钮。这会导致验证错误。在验证错误时,不执行命令=&gt;确保没有任何验证错误,例如向您的模板添加<h:messages />
  4. 阅读此答案:https://stackoverflow.com/a/2120183/395879