Jsf 2 IBM portal 8.0中的请求范围问题
我在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配置: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)
白颈
白颈
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运行时选项
ActionScopedRequestAttributeIBM使用自己的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>