Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 请求范围中的托管Bean保持创建状态_Java_Jsf_Richfaces_Jsf 1.2 - Fatal编程技术网

Java 请求范围中的托管Bean保持创建状态

Java 请求范围中的托管Bean保持创建状态,java,jsf,richfaces,jsf-1.2,Java,Jsf,Richfaces,Jsf 1.2,有一个奇怪的情况,我在战斗。我有3个页面,les称它们为A、B和C。每个页面在请求范围内都有自己的托管Bean:MB1、MB2和MB3。当我输入A时,将创建MB1。从A中,我调用window.showModalDialog打开B,每次B都会创建其打开的MB2。当我用window.showModalDialog从B调用第C页时,奇怪开始了,MB3被创建了一次。这种行为让我发疯,因为我做过这样的事情,而且这是第一次发生 我还必须指出,MB1和MB2具有@KeepAlive注释(类似于使用a4j:Ke

有一个奇怪的情况,我在战斗。我有3个页面,les称它们为A、B和C。每个页面在请求范围内都有自己的托管Bean:MB1、MB2和MB3。当我输入A时,将创建MB1。从A中,我调用window.showModalDialog打开B,每次B都会创建其打开的MB2。当我用window.showModalDialog从B调用第C页时,奇怪开始了,MB3被创建了一次。这种行为让我发疯,因为我做过这样的事情,而且这是第一次发生

我还必须指出,MB1和MB2具有@KeepAlive注释(类似于使用
a4j:KeepAlive
标记组件),MB3是一个干净的托管bean

我愿意接受任何解决这个问题的想法。我目前正在使用JSF1.2、RichFaces 3.3.3和JBoss EAP 5.1

谢谢你的时间,也很抱歉我的英语不好

编辑1:A、B和C页的源代码:

A页:

<!-- The js function which calls page B -->
<script type="text/javascript">
function buscaDeposito() {
    var blnResultado = false;
    var sUrl = 'pageB.jsf';
    var oDatos = new Object();
    var args = 'dialogHeight: 450px; dialogWidth: 700px; edge: Raised; center: Yes; help: No; resizable: No; status: No';
    if (window.showModalDialog(sUrl, oDatos, args)) {
        blnResultado = true;
        document.getElementById('frmFormaCobroLiqDocCartera:txtNroDeposito').value = oDatos.ReturnValue;
    }
    return blnResultado;
}
</script>
<!-- HTML/JSF fragment of page A -->
<table class="tabla" width="100%">
    <tr>
        <td style="width: 25%; text-align: right">
            <h:outputText>Nro. de depósito no identificado</h:outputText>
        </td>
        <td style="width: 20%">
            <h:inputText id="txtNroDeposito" styleClass="inputText" style="width: 100%"
                readonly="true"
                value="#{formaCobroLiqDocCartera.numeroDepositoNoIdentificado}" />
        </td>
        <td>
            <a4j:commandLink id="lnkBuscaDNIDeposito"
                onclick="if (!buscaDeposito()) return false;"
                action="#{formaCobroLiqDocCartera.cargaDatosDeposito}"
                reRender="pnlDeposito" limitToList="true">
                <h:graphicImage value="/Resource/iconos/buscar-con-ayuda.png"
                    styleClass="pic" title="Buscar" />
            </a4j:commandLink>
        </td>
    </tr>
</table>

函数buscaDeposito(){
var blnResultado=假;
var sUrl='pageB.jsf';
var oDatos=新对象();
var args='dialogHeight:450px;dialogWidth:700px;edge:凸起;center:Yes;help:No;resizeable:No;status:No';
if(window.showModalDialog(sUrl、oDatos、args)){
blnResultado=真;
document.getElementById('frmFormacobroliqdoc卡特拉:txtNroDeposito')。value=oDatos.ReturnValue;
}
返回blnResultado;
}
第二副部长
B页:

<script type="text/javascript">
    window.returnValue = false;
    // The js function which calls pageC
    function veDetalleDeposito() {
        //The function depositoSeleccionado checks if at least one 
        //radio button has been selected in the dataTable.
        if (!depositoSeleccionado()) {
            alert('Debe seleccionar un depósito.');
        } else {
            var sUrl = 'pageC.jsf';
            var oDatos = new Object();
            var args = 'dialogHeight: 280px; dialogWidth: 400px; edge: Raised; center: Yes; help: No; resizable: No; status: No';
            window.showModalDialog(sUrl, oDatos, args);
        }
    }
</script>
<!-- The call to pageC in the oncomplete javascript because I must set a session
    variable with the value of the selected row. -->
<a4j:commandLink id="lnkVeDetalle" oncomplete="veDetalleDeposito()">
    <h:graphicImage value="/Resource/iconos/visualizar-registro.png" styleClass="pic"
        title="Ver detalle de depósito" />
</a4j:commandLink>
<rich:dataTable id="dtDepositos" width="100%" headerClass="cabeceraDataTable"
    binding="#{listaDepositoNoIdentificado.hdtDepositos}" rows="15"
    value="#{listaDepositoNoIdentificado.lstDepositos}" var="deposito">
    <rich:column width="5%" style="text-align:center">
        <f:facet name="header">
            <h:outputText value="Seleccione" />
        </f:facet>
        <h:selectOneRadio onclick="dataTableSelectOneRadio(this)"
            valueChangeListener="#{listaDepositoNoIdentificado.setSelectedItem}">
            <f:selectItem itemValue="null" />
        </h:selectOneRadio>
    </rich:column>
    <!-- more columns here... -->
</rich:dataTable>

window.returnValue=false;
//调用pageC的js函数
函数veDetalleDeposito(){
//函数depositoSeleccionado检查是否至少有一个
//已在数据表中选择单选按钮。
如果(!depositoSeleccionado()){
警报(“Debe Selecciator un depósito.”);
}否则{
var sUrl='pageC.jsf';
var oDatos=新对象();
var args='dialogHeight:280px;dialogWidth:400px;edge:凸起;center:Yes;help:No;resizeable:No;status:No';
window.showmodaldialdialog(sUrl、oDatos、args);
}
}
页面C(一个简单的jsf页面,它什么都不做):


不需要任何身份证明
不需要任何身份证明
蒂波:
努梅罗:
faces-config.xml:

<managed-bean>
    <managed-bean-name>formaCobroLiqDocCartera</managed-bean-name>
    <managed-bean-class>com.abaco.presentacion.managedbean.PFormaCobroLiqDocCartera</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<managed-bean>
    <managed-bean-name>listaDepositoNoIdentificado</managed-bean-name>
    <managed-bean-class>com.abaco.presentacion.managedbean.PListaDepositoNoIdentificado</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<managed-bean>
    <managed-bean-name>detalleDeposito</managed-bean-name>
    <managed-bean-class>com.abaco.presentacion.managedbean.PDetalleDeposito</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<managed-bean>
    <managed-bean-name>pageX</managed-bean-name>
    <managed-bean-class>com.abaco.presentacion.managedbean.PageXBean</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

formaCobroLiqDocCartera
com.abaco.presentacion.managedbean.pformacobroliqdoc卡特拉
要求
ListadePositionIdentificationCado
com.abaco.presentacion.managedbean.plistaDepositonoIdentificationCado
要求
德塔莱托
com.abaco.presentacion.managedbean.pdetallesto
要求
如果你还需要什么来检查这个问题的话,你可以问一下,我会尽快把它发出去。顺便说一句,很抱歉在我睡觉的最后8个小时里没有写任何东西


编辑2:我已经在其他web Explorer中回顾了这个问题,结果是这个问题只出现在恶意的IE8中:(.有什么办法可以防止这种奇怪的行为吗?

在网上冲浪后,我发现这对我有帮助。我遵循了这个配置,现在我的页面A、B和C都正常工作了

编辑:我的问题只是一个IE 8配置。但是在带有RichFaces 3.3.3
@KeepAlive
标记的PageXBean上还有另一个问题。当我使用
showDialog
js函数打开pageX.jsp时,第一次它工作得很好,但从第二次开始它显示了一个错误,甚至没有调用托管bean构造函数.这让我发疯,因为在我的同事给出这一点之前,没有任何线索。我将深入地向您展示这个问题:

faces-config.xml:

<managed-bean>
    <managed-bean-name>formaCobroLiqDocCartera</managed-bean-name>
    <managed-bean-class>com.abaco.presentacion.managedbean.PFormaCobroLiqDocCartera</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<managed-bean>
    <managed-bean-name>listaDepositoNoIdentificado</managed-bean-name>
    <managed-bean-class>com.abaco.presentacion.managedbean.PListaDepositoNoIdentificado</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<managed-bean>
    <managed-bean-name>detalleDeposito</managed-bean-name>
    <managed-bean-class>com.abaco.presentacion.managedbean.PDetalleDeposito</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<managed-bean>
    <managed-bean-name>pageX</managed-bean-name>
    <managed-bean-class>com.abaco.presentacion.managedbean.PageXBean</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>
因此,起初没有问题,但问题是类X的值与托管bean的值相同:

public class UConstants {
    public static class SessionVars {
        public static String CLASS_X = "pageX";
    }
}
这是我们问题的根源。当他将值更改为
CLASS_X=“pageX2”
时,一切都开始正常工作


希望这对任何人都有帮助。

你能分享源代码吗?你怎么知道MB3只创建了一次?@prajeeshkumar,因为当我转到第3页时,它会显示相同的信息。在MB3的构造函数中,我添加了这个逻辑,以从MB2中设置的会话变量中获取一些数据。另外,我在选择一个无线电时,会在MB2中更改这个会话变量按钮,在pageB显示pageC或通过此按钮关闭之前,选择(未在pageB代码中发布)然后返回到MB1,在那里信息显示正确。它将如何解决所有其他网站访问者的问题?您是否要显示一些警告消息,说明他们必须更改浏览器设置才能使您的网站正常工作?@BalusC抱歉在这么长时间后编辑我的问题。浏览器中没有警告,只是t他有奇怪的行为,但这是一个IE8配置。我描述了一个主要问题和解决方案。