我使用 Struts2+JSP+Waffle 作为我的 Java EE 框架。在其中一个 JSP 中,我制作了一个带有 post 操作的表单,以将数据作为对象传输,类似于:
<input type="text" name="bookVo.isbn_no" id="isbn_no">
...并且程序将设置一个新的“bookVo”,其中包含大量输入值。我的程序将执行函数save()来获取 bookVo 并执行一些 SQL 操作。
我在我的函数中添加了一些日志,这是我目前得到的:
- 该程序正常执行,它将首先执行setBookVo()然后save()。
- 我使用Waffle为windows用户一键登录,它根据登录的windows用户检测用户详细信息,无需输入密码即可快速登录。
- 问题发生在我实现 Waffle 之后,记录器显示它跳过了bookVo()但执行了save(),这最终导致我在 bookVo 中的值出现 Nullpointerexception。
struts.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.custom.i18n.resources"
value="com.booksys.resources.property.message.CommonResources" />
<constant name="struts.multipart.maxSize" value="52428800" />
<constant name="struts.devMode" value="false" />
<constant name="struts.ognl.allowStaticMethodAccess" value="true" />
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<package name="default" extends="struts-default">
<result-types>
<result-type name="layout1" class="com.booksys.common.MyTilesTemplateResult" />
<result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult"/>
</result-types>
<global-results>
<result name="exception">/jsp/common/exception.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping exception="java.lang.Exception"
result="exception"></exception-mapping>
</global-exception-mappings>
<action name="login">
<result>/login.jsp</result>
</action>
<package name="ajax" extends="json-default">
<interceptors>
<interceptor-stack name="defaultStack">
<interceptor-ref name="json">
<param name="enableSMD">true</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<action name="*JsonAction" method="{1}" class="com.booksys.ajax.JsonAction">
<result name="fail"></result>
<result type="json">
<param name="root">result</param>
</result>
</action>
</package>
</struts>
bookSave.jsp:
<s:form action="booksave.action" method="post" name="form1" id="form1">
...more inputs...
<button id="saveBtn" type="button" onclick="save();">Save</button>
</s:form>
function save() {
if(!checkForm()) {
/*check each input value, if any input is null or "", return false*/
return false;
}
$( "input:disabled" ).attr("disabled", false);
$('#form1').attr('action','booksave.action');
$("#form1").submit();
}
由于这个问题偶尔会发生,我真的不知道我可以从哪里开始找到解决方案,有什么想法会发生这种情况吗?