2014-03-31 59 views
1

我正在学习如何自己使用ZKoss,Maven和Spring,并且我遇到了一些我不明白的问题,如果有人能帮助我,我会非常感激。 对我来说,它看起来像Spring没有正确实例化我的计算器对象,在“CalculadoraServlet”中。Spring没有正确实例化一个对象。为什么?

下面是代码:

Zkoss(inidex.zul):

<?page title="Auto Generated index.zul"?> 

<window title="Calculadora" border="normal" width="400px" apply="sdec.CalculadoraServlet"> 

    <grid > 
     <rows> 
     <row> 
      Num1: <textbox id="num1" value="${win$composer.current.num1}" /> 
     </row> 
     <row> 
      Num2: <textbox id="num2" value="${win$composer.current.num2}" /> 
     </row> 
     </rows> 
    </grid> 
    <button id="submitButton" label="Submit"/> 

    <grid > 
     <rows> 
     <row> 
      Resultado <textbox id="result" value="${win$composer.current.result}" /> 
     </row> 
     </rows> 
    </grid> 
</window> 

CalculadoraServlet:

@Controller 
public class CalculadoraServlet extends SelectorComposer<Component>{ 
/** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    @Autowired 
    private Calculadora servicioCalculadora; 


     @Wire 
     private Textbox num1; 
     @Wire 
     private Textbox num2; 
     @Wire 
     private Textbox result; 


    @Listen("onClick = #submitButton") 
    public void calcula() throws IOException { 

     int numero1=Integer.parseInt(num1.getValue()); 
     int numero2=Integer.parseInt(num2.getValue()); 

     int resultado=servicioCalculadora.sumar(numero1, numero2); 

     String resul=Integer.toString(resultado); 
     result.setValue(resul); 
     System.out.println(resultado); 

    } 

} 

而且finaly Calculadora:

package sdec; 

public class Calculadora { 

     public Calculadora(){ 

     //"Traza". Se mostrará cada vez que inicie la app y spring instancie un obj calculadora 
      System.out.println("Calculadora inicializada por Spring"); 
     } 

     public int sumar(int num1, int num2){ 

      return num1+num2; 
     } 
} 

谢谢你提前很多!我是一名初级程序员,这有点难以理解! =(

编辑:(添加的applicationContext文件):

<?xml version="1.0" encoding="UTF-8"?> 

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:oxm="http://www.springframework.org/schema/oxm" 
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 
    http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm-3.0.xsd 
    http://www.springframework.org/schema/aop 
    http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> 

<context:annotation-config /> 

<context:component-scan base-package="sdec" /> 

<bean id="servicioCalculadora" class="sdec.Calculadora"/> 

</beans> 

和错误我得到的是令人恐惧的空指针异常,当我按下 “提交” SK按钮:

abr 01, 2014 9:41:30 AM org.zkoss.zk.ui.impl.UiEngineImpl handleError:1359 
Grave: >>java.lang.NullPointerException 
>> at sdec.CalculadoraServlet.calcula(CalculadoraServlet.java:37) 
>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
>> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
>> at java.lang.reflect.Method.invoke(Method.java:606) 
... 

Thans很多给大家!真的!这一定是史上最有用的foum!

+0

会发生什么事,当你运行它?你也可以分享你的上下文文件吗? – DaveH

+0

绝对需要该上下文文件。 –

+0

已经使用applicationContext文件和我得到的错误编辑了帖子。非常感谢! – dhoakohime

回答

1

oke,

首先在CalculadoraServlet中丢掉@Controller
其次,你尝试从你的弹簧容器中初始化一个spring bean,并且zk有一个zk容器,所以zk找不到你的Calculadora类是正常的。

对于Calculadora类,您必须使用@WireVariable

所以它应是这样的:

public class CalculadoraServlet extends SelectorComposer<Component>{ 

    private static final long serialVersionUID = 1L; 

    @WireVariable 
    private Calculadora servicioCalculadora; 

    .... 
} 
+0

非常感谢!你几乎发现了!我不得不使用你注释的注释加上这个:@VariableResolver(org.zkoss.zkplus.spring.DelegatingVariableResolver.class)over“public class CalculadoraServlet extends SelectorComposer {”。似乎我错过了一些链接ZK和Spring的注释。 Uff..teres太多学习!我只学了3天! – dhoakohime

相关问题