java – 错误:ViewMap中的非序列化属性值

前端之家收集整理的这篇文章主要介绍了java – 错误:ViewMap中的非序列化属性值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在2个系统(笔记本电脑)中有相同的应用程序,但它在一个但不在另一个系统中工作.我在另一个系统中得到以下错误.我也发布了下面的代码.我想做的是使用调用不同托管bean方法的按钮级联下拉列表,以及在数据库添加记录的placeOrder按钮.但是我在页面时遇到以下错误装载
  1. WARNING: Setting non-serializable attribute value into ViewMap: (key: stockOrderBean,value class: beans.stockOrderBean)
  2. SEVERE: Error Rendering View[/ClientTemplate/stockTrade.xhtml]
  3. java.io.NotSerializableException: beans.stockOrderBean
  4.  
  5. WARNING: JSF1087: Unable to generate Facelets error page as the response has already been committed.
  6. SEVERE: javax.faces.FacesException: beans.stockOrderBean

xhtmlcode:

  1. <h:outputText value="Exchange :"/>
  2.  
  3. <p:selectOneMenu value="#{stockOrderBean.exchange}" style="width: 200px">
  4. <f:selectItem itemLabel="Select Exchange"/>
  5. <f:selectItem itemLabel="NSE" itemValue="nse"/>
  6. <f:selectItem itemLabel="BSE" itemValue="bse"/>
  7. <p:ajax update="sym" listener="#{stockOrderBean.wow}"/>
  8. </p:selectOneMenu>
  9. <h:outputText value="Select ScripSymbol :"/>
  10.  
  11. <p:selectOneMenu value="#{stockOrderBean.scripID}" style="width: 200px" id="sym">
  12. <f:selectItem itemLabel="Select scrip"/>
  13. <f:selectItems var="scrip" value="#{stockOrderBean.sl}" itemLabel="#{scrip.scripSymbol}" itemValue="#{scrip.scripID}"/>
  14. </p:selectOneMenu>
  15.  
  16. <p:commandButton value="Get Quote" actionListener="#{stockOrderBean.equity.setQuote}" oncomplete="cd.show()" update=":frmdialog" />
  17.  
  18. <h:panelGrid columns="2" id="d1" style="width:565px">
  19. <h:outputText value="How would you like to place order"/>
  20. <p:selectOneRadio value="#{stockOrderBean.transType}">
  21. <f:selectItem itemLabel="Market Order" itemValue="MarketOrder"/>
  22. <p:ajax update="frmTrade:d1"/>
  23. <f:selectItem itemLabel="Limit Order" itemValue="LimitOrder"/>
  24. <p:ajax update="frmTrade:d1"/>
  25. </p:selectOneRadio>
  26. <h:outputText value="Trigger Price"/>
  27. <p:inputText value="#{stockOrderBean.triggerPrice}" disabled="#{stockOrderBean.transType == 'LimitOrder'}"/>
  28. <h:outputText value="Limit Price"/>
  29. <p:inputText value="#{stockOrderBean.limitPrice}" disabled="#{stockOrderBean.transType == 'MarketOrder'}"/>
  30. </h:panelGrid>
  31.  
  32. <h:outputText value="Select your Demate Account"/>
  33.  
  34. <p:selectOneMenu value="#{stockOrderBean.demateAccount}" style="width: 120px">
  35. <f:selectItem itemLabel="#{stockOrderBean.demateAccount}" itemValue="#{stockOrderBean.demateAccount}"/>
  36. </p:selectOneMenu>
  37.  
  38. <p:commandButton value="Place New Order" actionListener="#{stockOrderBean.placeOrder}"/>
  39. <p:commandButton value="Reset New Order" type="reset"/>
  40.  
  41. </h:form>
  42. <p:dialog widgetVar="cd" header="Scrip Quotes Detail" resizable="true">
  43. <h:form id="frmdialog">
  44. <table>
  45. <tr>
  46. <td>
  47. Ask :
  48. </td>
  49. <td>
  50. <b><h:outputText value="#{stockOrderBean.equity.ask}"/></b>
  51. </td>
  52.  
  53. </table>
  54. </h:form>
  55. </p:dialog>

sockOrderBean代码

  1. @javax.faces.bean.ManagedBean
  2. @javax.faces.bean.ViewScoped
  3. public class stockOrderBean{
  4.  
  5. @WebServiceRef(wsdlLocation = "WEB-INF/wsdl/localhost_8080/StatelessWebService/StatelessWebService.wsdl")
  6. private StatelessWebService_Service service;
  7. //properties with getter setter
  8. @ManagedProperty(value="#{equtiyBean}")
  9. private equityBean equity = new equityBean();
  10. public void placeOrder(...){
  11. //method not called
  12. }

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

解决方法

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

如果存储在HTTP会话中的对象未实现Serializable,那么您将在消息中获得带有完全限定类名的NotSerializableException.然后,您应该修复该类以实现Serializable.

  1. public class StockOrderBean implements Serializable {
  2. // ...
  3. }

在JSF中,这适用于所有视图和会话范围的托管bean.请求和应用程序作用域bean不需要实现Serializable.请注意,所有bean属性也应该是Serializable.但是只要遇到一个,你就会得到足够清晰的NotSerializableException.

猜你在找的Java相关文章