Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.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 错误:无法将属性值序列化到ViewMap中_Java_Jsf_Jakarta Ee_Managed Bean - Fatal编程技术网

Java 错误:无法将属性值序列化到ViewMap中

Java 错误:无法将属性值序列化到ViewMap中,java,jsf,jakarta-ee,managed-bean,Java,Jsf,Jakarta Ee,Managed Bean,我在两个系统(笔记本电脑)中使用了相同的应用程序,但它在一个系统中工作,而在另一个系统中没有。我还发布了下面的代码。我想做的是使用一个按钮级联下拉菜单,该按钮调用另一个托管bean的方法,并使用placeOrder按钮在数据库中添加一条记录 WARNING: Setting non-serializable attribute value into ViewMap: (key: stockOrderBean, value class: beans.stockOrderBean) SEVE

我在两个系统(笔记本电脑)中使用了相同的应用程序,但它在一个系统中工作,而在另一个系统中没有。我还发布了下面的代码。我想做的是使用一个按钮级联下拉菜单,该按钮调用另一个托管bean的方法,并使用placeOrder按钮在数据库中添加一条记录

WARNING: Setting non-serializable attribute value into ViewMap: (key: stockOrderBean, value class: beans.stockOrderBean)
    SEVERE: Error Rendering View[/ClientTemplate/stockTrade.xhtml]
    java.io.NotSerializableException: beans.stockOrderBean

    WARNING: JSF1087: Unable to generate Facelets error page as the response has already been committed.
    SEVERE: javax.faces.FacesException: beans.stockOrderBean
XHTML代码:

                <h:outputText value="Exchange :"/>

                <p:selectOneMenu value="#{stockOrderBean.exchange}" style="width: 200px">
                    <f:selectItem itemLabel="Select Exchange"/>
                    <f:selectItem itemLabel="NSE" itemValue="nse"/> 
                    <f:selectItem itemLabel="BSE" itemValue="bse"/>
                    <p:ajax update="sym" listener="#{stockOrderBean.wow}"/>
                </p:selectOneMenu>
                <h:outputText value="Select ScripSymbol :"/>

                <p:selectOneMenu value="#{stockOrderBean.scripID}" style="width: 200px" id="sym">
                    <f:selectItem itemLabel="Select scrip"/>
                    <f:selectItems var="scrip" value="#{stockOrderBean.sl}" itemLabel="#{scrip.scripSymbol}" itemValue="#{scrip.scripID}"/>
                </p:selectOneMenu>

                <p:commandButton value="Get Quote"  actionListener="#{stockOrderBean.equity.setQuote}" oncomplete="cd.show()" update=":frmdialog" />

                <h:panelGrid columns="2" id="d1" style="width:565px">
                    <h:outputText value="How would you like to place order"/>                                
                    <p:selectOneRadio value="#{stockOrderBean.transType}">
                        <f:selectItem itemLabel="Market Order" itemValue="MarketOrder"/>
                        <p:ajax update="frmTrade:d1"/>
                        <f:selectItem itemLabel="Limit Order" itemValue="LimitOrder"/>
                        <p:ajax update="frmTrade:d1"/>
                   </p:selectOneRadio>                            
                   <h:outputText value="Trigger Price"/>
                   <p:inputText value="#{stockOrderBean.triggerPrice}" disabled="#{stockOrderBean.transType == 'LimitOrder'}"/>
                   <h:outputText value="Limit Price"/>
                   <p:inputText value="#{stockOrderBean.limitPrice}" disabled="#{stockOrderBean.transType == 'MarketOrder'}"/>                                
                </h:panelGrid>                

                <h:outputText value="Select your Demate Account"/>

                <p:selectOneMenu value="#{stockOrderBean.demateAccount}" style="width: 120px">
                    <f:selectItem itemLabel="#{stockOrderBean.demateAccount}" itemValue="#{stockOrderBean.demateAccount}"/>
                </p:selectOneMenu>

                <p:commandButton value="Place New Order"  actionListener="#{stockOrderBean.placeOrder}"/>
         <p:commandButton value="Reset New Order" type="reset"/>

</h:form>        
        <p:dialog widgetVar="cd" header="Scrip Quotes Detail" resizable="true">
            <h:form id="frmdialog">                        
                <table>
                            <tr>
                            <td>
                                Ask :
                            </td>
                            <td>                                        
                                <b><h:outputText value="#{stockOrderBean.equity.ask}"/></b>
                            </td>

                    </table>
               </h:form>
       </p:dialog>           


相同的代码在一个系统中工作,但在另一个系统上不工作。原因可能是什么?我如何解决它?

添加到会话中的任何内容都是序列化的。错误是告诉您,您的支持bean可能应该是可序列化的。不知道为什么它是间歇性的

一些服务器配置需要将HTTP会话保存在硬盘上,或者需要通过网络将它们传输到一些中央数据存储,通常是为了在群集中的多个服务器之间共享会话,或者最大限度地减少过多的内存使用。这反过来要求实现所有会话属性,以便服务器可以使用这些属性将Java对象转换为字节,然后将这些字节保存在磁盘上或通过网络传输,并将这些字节转换回Java对象

如果HTTP会话中存储的对象未实现
Serializable
,则您将在消息中获得一个带有完整限定类名的
notserializableeexception
。然后,您应该修复该类以实现
可序列化

public class StockOrderBean implements Serializable {
    // ...
}

在JSF中,这适用于所有视图和会话范围的托管bean。请求和应用程序范围的bean不需要实现
Serializable
。注意,所有bean属性也应该是可序列化的。但每当遇到异常时,您都会得到一个足够清晰的
NotSerializableException

尝试将下面的代码添加到web.xml中。它将会话对象保留在服务器端

<context-param>
   <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
   <param-value>server</param-value>
</context-param>

javax.faces.STATE_保存方法
服务器

服务器是否在单独的盒子上?它们是否都在同一版本的OS、JRE等上?另外,你的web应用程序中是否包含JS,如果有,它们是否被缓存?两者都有相同版本的OS、JRE等。。两者都有单独的glassfish服务器。。我的web应用程序中没有任何js。。
<context-param>
   <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
   <param-value>server</param-value>
</context-param>