Websphere中JSF 2.0驱动的portlet—如何实现命令链接



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

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

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

编辑

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

  • portlet API负责生成url——生成有效的门户url
  • 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. 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之前,我添加了一个带有无效动作值的新命令按钮。这将导致验证错误。如果出现验证错误,则不执行命令=>确保没有任何验证错误,例如,通过向模板添加<h:messages />
  4. 阅读这个答案:https://stackoverflow.com/a/2120183/395879

相关内容

  • 没有找到相关文章