Jsf 2 IBM portal 8.0中的请求范围问题

Jsf 2 IBM portal 8.0中的请求范围问题,jsf-2,portlet,websphere-portal,jsr286,Jsf 2,Portlet,Websphere Portal,Jsr286,我在WebSpherePortalServer8.0中运行了一个JSR286portlet。在那里,我做了一个文件上传,并在上传后显示处理结果。最初,负责处理此文件的托管bean有一个请求范围(@requestscope)。当我点击命令按钮上传文件时,MB中的方法会正确处理并填充一组结果(下面MB中的dadosCarga属性),这些结果必须显示在JSP页面中。然而,当我重新定义页面时,我得到了一个stacktrace,解释没有找到我的托管Bean类(ClassNotFoundException)

我在WebSpherePortalServer8.0中运行了一个JSR286portlet。在那里,我做了一个文件上传,并在上传后显示处理结果。最初,负责处理此文件的托管bean有一个请求范围(@requestscope)。当我点击命令按钮上传文件时,MB中的方法会正确处理并填充一组结果(下面MB中的dadosCarga属性),这些结果必须显示在JSP页面中。然而,当我重新定义页面时,我得到了一个stacktrace,解释没有找到我的托管Bean类(ClassNotFoundException),结果也没有显示。我使用ViewScope得到了相同的结果。就在我将范围从请求更改为会话(@SessionScoped)时,显示了结果

在我寻找了一些答案之后,我在portlet中找到了关于操作和呈现请求之间差异的解释。建议使用。但是,此页面不再处于活动状态。有一个(IBM门户在MyFaces上运行)。然而,我不知道如何使用它。它只是将JAR(api和实现)都放在WEB-INF/lib中吗?我试过了,但当我尝试在应用程序中加载页面时,出现了一个异常。所以我把它们去掉了

下面,我展示了我的Portlet配置、托管Bean和JSP页面。有没有其他更好的办法来解决这个问题?或者是关于如何使用correclty MyFaces Bridge的解释(我在它的主页上找不到)

谢谢

拉斐尔·阿方索

Portlet配置:


白颈
白颈
com.ibm.faces20.portlet.FacesPortlet
com.ibm.faces.portlet.page.view
/pages/carga/cargaUsuarios.jsp
wps.markup
html
0
文本/html
看法
卡加德乌萨里奥斯酒店
卡加杜苏亚里奥斯酒店
卡加乌萨里奥
烂豆:

@ManagedBean(name=“cargaUsuariosMB”)
@请求范围
公共类CARGUARIOSMB扩展了AbstractMB{
私有字符串nomerquivo;//文件名
私有集合dadosCarga;//处理结果。
公共字符串doUploadArquivo(){
this.dadosCarga=…//处理文件并接收集合
this.nomeArquivo=…//获取上载的文件名
return null;//返回到同一原始页面
}
//吸气剂。。。
}
JSP页面(cargaUsuarios.JSP):


乌苏里奥斯之家酒店

文件:





关于渲染和操作请求、JSF(或CDI)请求和ViewScope不能正常工作,您是对的。但解决方案可以是使用包含全新作用域的PortletLifecycleScoped和PortletRedisplayScoped。第一个将与RequestScope完全相同,您将在中找到更多信息。但是,我不确定是否能够在除GateIn之外的其他门户中使用这些作用域。

当您使用请求作用域时,需要将数据从portlet操作传送到portlet呈现阶段。数据通常通过portlet为请求范围的bean携带,呈现参数为字符串。为了将数据保存在那里,对象需要可序列化

除此之外,您可能希望将WebSpherePortal下的WebSphereApplicationServer升级到8.0.0.6版本,以避免将门户本身升级到最新的补丁包

希望这有帮助


顺便说一句:JSR286和JEE6没有指定CDI如何与Portlet编程模型交互。您可能需要查看它。

请尝试在portlet.xml中添加以下内容,看看它是否有效:

<container-runtime-option>
    <name>javax.portlet.actionScopedRequestAttributes</name>
    <value>true</value>
</container-runtime-option>

javax.portlet.ActionScopedRequestAttribute
真的
有关更多信息,请下载并查看Portlet V2.0规范中的以下部分: PLT.10.4.4运行时选项
ActionScopedRequestAttribute

IBM使用自己的portlet桥。除此之外,不建议使用任何桥梁

@ManagedBean(name = "cargaUsuariosMB")
@RequestScoped
public class CargaUsuariosMB extends AbstractMB {

    private String nomeArquivo; // FIle name

    private Collection<CargaUsuarioInfoBean> dadosCarga; // processing result.

    public String doUploadArquivo() {
        this.dadosCarga = ... // process file and receives a collection 

        this.nomeArquivo = ... // get uploaded file name

        return null; // Return to same origin page
    }

    // Getters...

}
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet"%>
<%@taglib
    uri="http://www.ibm.com/xmlns/prod/websphere/portal/v6.1/portlet-client-model"
    prefix="portlet-client-model"%>
<%@page language="java" contentType="text/html"
    pageEncoding="ISO-8859-1" session="false"%>

<portlet:defineObjects />
<portlet-client-model:init>
    <portlet-client-model:require module="ibm.portal.xml.*" />
    <portlet-client-model:require module="ibm.portal.portlet.*" />
</portlet-client-model:init>
<f:view>
    <h2>Carga de Usuários</h2>
    <h:form enctype="multipart/form-data">
        <p>
            <label for="arquivoCarga"> <span>File:</span> </label> <input
                type="file" name="arquivoCarga" id="FileCarga" />
        </p>
        <br />
        <br />
        <h:commandButton value="Salvar File"
                    action="#{cargaUsuariosMB.doUploadArquivo}"></h:commandButton>
    </h:form>
    <h:panelGroup id="pnlProcessamento"
        rendered="#{not empty cargaUsuariosMB.dadosCarga }">
        <h:outputText
            value="Dados do File #{cargaUsuariosMB.nomeArquivo} processados com sucesso."></h:outputText>
        <br />
        <h:dataTable id="tblDadosProcessamento"
            columnClasses="numLinha,cpf,status"
            value="#{cargaUsuariosMB.dadosCarga}" var="dadosCarga"
            styleClass="dadosProcessamento" width="100%" border="1">
            <%-- Show processing results. --%>
        </h:dataTable>
    </h:panelGroup>
    <h:messages styleClass="messages" id="msgsPesquisaCadastro"
        errorClass="mensagensErro" errorStyle="color: red;"></h:messages>
</f:view>
<container-runtime-option>
    <name>javax.portlet.actionScopedRequestAttributes</name>
    <value>true</value>
</container-runtime-option>