i have the same application in 2 systems(laptops) but its working in one but not in another.i get the following error in another system. i have also posted the code below.what i want to do is cascading dropdown with a button that calls method of a different managed bean, and a placeOrder button to add a record in database.but i get the following error at the time of page loading
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
xhtmlcode:
<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>
sockOrderBean code:
@javax.faces.bean.ManagedBean
@javax.faces.bean.ViewScoped
public class stockOrderBean{
@WebServiceRef(wsdlLocation = "WEB-INF/wsdl/localhost_8080/StatelessWebService/StatelessWebService.wsdl")
private StatelessWebService_Service service;
//properties with getter setter
@ManagedProperty(value="#{equtiyBean}")
private equityBean equity = new equityBean();
public void placeOrder(...){
//method not called
}
the same code is working in one system but not on another.what could be the reason and how do i solve it?
Anything which is added to session is Serialized. The error is telling you that your backing bean should probably be Serializable. No idea why it's intermittent though.
Try adding the code below to your web.xml. It will keep session objects on server side.
Some server configurations need to save HTTP sessions on harddisk or need to transfer them over network to some central datastore, often with the goal to share the session between multiple servers in a cluster, or to minimize excessive memory usage. This in turn requires that all session attributes implement
Serializable
so that the server could useObjectOutputStream
to convert Java objects to bytes which can then be saved on disk or transferred over network andObjectInputStream
to convert those bytes back to Java objects.If an object which is stored in the HTTP session does not implement
Serializable
, then you will get aNotSerializableException
with the full qualified class name in the message. You should then fix the class to implementSerializable
.In JSF, this applies to all view and session scoped managed beans. Request and application scoped beans doesn't need to implement
Serializable
. Note that all of the bean properties should also beSerializable
. But you will get a clear enoughNotSerializableException
whenever one is encountered.