ZK框架loginButton的onClick触发NullPointerException问题求助
解决ZK登录按钮点击时的NullPointerException问题
嘿,这个问题其实很常见——你犯了一个ZK组件注入的基础错误:把需要ZK自动注入的组件字段都声明成static了!
问题根源
ZK的GenericForwardComposer是通过实例字段注入来关联ZUL页面上的组件的。也就是说,ZK会为每个组件实例创建对应的Composer实例,然后把页面上匹配id的组件赋值给Composer的非static实例字段。而你把username、password、loginButton甚至msg都加了static修饰符,这些字段属于类而非实例,ZK不会给它们注入任何组件实例,所以它们的值都是null,调用username.getText()自然就抛出NullPointerException了。
修复步骤
只需要移除这些字段的static修饰符即可,具体修改如下:
修正后的FooComposer代码
package foo; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.util.GenericForwardComposer; import org.zkoss.zul.Button; import org.zkoss.zul.Label; import org.zkoss.zul.Textbox; import org.zkoss.zul.Window; public class FooComposer extends GenericForwardComposer<Component> { private static final long serialVersionUID = 1218526917089196484L; /** 1. The login window. */ private Window window; /** 2. The login button. */ @SuppressWarnings("unused") private Button loginButton; // 移除static修饰符 /** 3. The custom message to display */ private Label msg; // 移除static,建议用private替代public /** 4. The username. */ private Textbox username; // 移除static修饰符 /** 5. The password. */ private Textbox password; // 移除static修饰符 /** * CODE TO EXECUTE WHEN THE LOGIN WINDOW IS CREATED */ public void onCreate$window() { System.out.println("INSIDE FOOCOMPOSER'S ONCREATE.."); // 注:这些配置已经在ZUL里设置过了,可以考虑移除重复代码 // window.doOverlapped(); // window.setPosition("center"); // window.setSizable(true); } /** * CODE TO EXECUTE WHEN THE LOGIN/SIGN-IN BUTTON IS CLICKED * * @throws Exception the exception */ public void onClick$loginButton() throws Exception { System.out.println("SIGN IN BUTTON CLICKED!"); System.out.println("==>" + username.getText()); // 现在可以正常获取输入值了 System.out.println("==>" + password.getText()); } }
额外小提示
- 尽量不要把组件字段声明为
public,像msg字段建议改成private,如果需要修改内容可以提供对应的getter/setter方法,符合封装原则。 - 你的ZUL里已经给window设置了
position="center"、mode="overlapped"等属性,onCreate里的重复设置可以移除,避免冗余代码。 - 你设置的
constraint="no empty"会在组件提交时自动验证输入,不需要手动判断空值,验证不通过会自动弹出提示给用户。
内容的提问来源于stack exchange,提问作者Sandeep Chatterjee
相关产品推荐
相关产品推荐

