0

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

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

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

编辑

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

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

1 回答 1

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 步之前,我添加了一个带有无效操作值的新命令按钮。这会导致验证错误。在验证错误时,不执行命令 => 确保没有任何验证错误,例如通过将 a 添加<h:messages />到您的模板
  4. 阅读此答案:https ://stackoverflow.com/a/2120183/395879
于 2014-08-15T12:41:59.350 回答