Java 服务端口在选择下拉列表时引发异常
我有一个级联下拉列表,它在一个系统上运行良好,但在另一个系统上无法运行。请参考以下代码: xhtml: 然后进入InvocationTargetException.java并进入以下方法:Java 服务端口在选择下拉列表时引发异常,java,web-services,jsf,jakarta-ee,managed-bean,Java,Web Services,Jsf,Jakarta Ee,Managed Bean,我有一个级联下拉列表,它在一个系统上运行良好,但在另一个系统上无法运行。请参考以下代码: xhtml: 然后进入InvocationTargetException.java并进入以下方法: public InvocationTargetException(Throwable target) { super((Throwable)null); // Disallow initCause this.target = target; } 最后,在glassfish中,返回的错误是:
public InvocationTargetException(Throwable target) {
super((Throwable)null); // Disallow initCause
this.target = target;
}
最后,在glassfish中,返回的错误是:
WARNING: /ClientTemplate/tradeReport.xhtml @17,74 listener="#{reportBean.wow()}": java.lang.NullPointerException
javax.el.ELException: /ClientTemplate/tradeReport.xhtml @17,74 listener="#{reportBean.wow()}": java.lang.NullPointerException
在managdbean中,如果我没有实现serializable,或者如果我没有将服务设置为transient,那么我会得到NotSerializable异常。
这个错误的原因是什么?我如何解决它?
编辑:
serviceBean:
@ManagedBean
@javax.faces.bean.RequestScoped
public class serviceBean{
@WebServiceRef(wsdlLocation = "WEB-INF/wsdl/localhost_8080/StatelessWebService/StatelessWebService.wsdl")
private StatelessWebService_Service service;
@ManagedProperty("#{reportBean}")
private reportBean reportBean;
public beans.reportBean getReportBean() {
return reportBean;
}
public void setReportBean(beans.reportBean reportBean) {
this.reportBean = reportBean;
} //other props
public String getExchange() {
return exchange;
}
public void setExchange(String exchange) {
this.exchange = exchange;
}
public void wow()
{
reportBean.setSl(getAllScripByExchange(reportBean.getExchange()));
}
reportBean:
@javax.faces.bean.ManagedBean
@javax.faces.bean.ViewScoped
public class reportBean implements Serializable {
private Integer scripID;
private String exchange;
private List<service.TradeStock> tradeList;
private List<MasterScrip> sl; //get set
将服务调用和操作方法拆分为不同的请求范围bean类。将其余的保留在视图范围的bean中。最后,通过
@ManagedProperty
将视图作用域注入请求作用域中
@ManagedBean
@RequestScoped
public class ReportActionBean {
@WebServiceRef(wsdlLocation = "WEB-INF/wsdl/localhost_8080/StatelessWebService/StatelessWebService.wsdl")
private StatelessWebService_Service service;
@ManagedProperty("#{reportDataBean}")
private ReportDataBean reportDataBean;
// ...
}
那么我在哪里编写wow()方法呢?在我当前的代码中,我正在调用wow()方法中的服务方法(请参见代码中的内容)
wow()
方法是我在回答中提到的操作方法,所以将其放在请求范围的bean中。那么你是说我的viewScoped bean应该只包含getter和setter吗,否—仅包括需要存储在视图范围中的属性(以及明显的getter/setter是)。例如代码中的exchange
和scripID
。我不确定“代码> SL<代码>是从哪里来的,但是如果它来自Web服务,请把它放在请求范围内。顺便说一下,如果WebService每次都返回相同的数据并且很少更改,那么您可能需要考虑将它存储在应用程序范围的bean中,并最终引入一个调度器,该调度器在午夜左右重新加载它。
@ManagedBean
@javax.faces.bean.RequestScoped
public class serviceBean{
@WebServiceRef(wsdlLocation = "WEB-INF/wsdl/localhost_8080/StatelessWebService/StatelessWebService.wsdl")
private StatelessWebService_Service service;
@ManagedProperty("#{reportBean}")
private reportBean reportBean;
public beans.reportBean getReportBean() {
return reportBean;
}
public void setReportBean(beans.reportBean reportBean) {
this.reportBean = reportBean;
} //other props
public String getExchange() {
return exchange;
}
public void setExchange(String exchange) {
this.exchange = exchange;
}
public void wow()
{
reportBean.setSl(getAllScripByExchange(reportBean.getExchange()));
}
@javax.faces.bean.ManagedBean
@javax.faces.bean.ViewScoped
public class reportBean implements Serializable {
private Integer scripID;
private String exchange;
private List<service.TradeStock> tradeList;
private List<MasterScrip> sl; //get set
SEVERE: Error Rendering View[/ClientTemplate/tradeReport.xhtml]
javax.faces.FacesException: java.io.NotSerializableException: service.MasterScrip
@ManagedBean
@RequestScoped
public class ReportActionBean {
@WebServiceRef(wsdlLocation = "WEB-INF/wsdl/localhost_8080/StatelessWebService/StatelessWebService.wsdl")
private StatelessWebService_Service service;
@ManagedProperty("#{reportDataBean}")
private ReportDataBean reportDataBean;
// ...
}