我想用 Struts 2 经典getter/setter
方式向我的动作类提交一个表单。所有其他字段都获得了它们的值,除了一个boolean
字段,false
当我选中它对应的复选框时,它仍然存在。
我的jsp中有一个这样的复选框:
<div class="col-md-3">
<input class="input-md" type="checkbox" id="soloIdaId" name="soloIda" />
</div>
在我的行动课上,我有:
private boolean soloIda;
及其getter/setter。但是当我检查它时它仍然是错误的。
我注意到在queryString
包含:
...&soloIda=on&... (I am testing with FF)
而且,如果我尝试获取请求的参数,我会得到true
:
HttpServletRequest request = ServletActionContext.getRequest();
String soloIdaParam = request.getParameter("soloIda"); //"true" when I debug
不知道这是否重要,但我正在使用我的拦截器。但我总是包含defaultStack
, 并且我相信默认拦截器正在处理这种工作(使用 getter/setter 为字段分配值)。所以为什么?
附上我的struts.xml
这里:
<interceptors>
<interceptor name="authentication"
class="com.WindThunder.interceptor.LoginInterceptor">
</interceptor>
<interceptor name="query"
class="com.WindThunder.interceptor.QueryInterceptor">
</interceptor>
<interceptor-stack name="authStack">
<interceptor-ref name="authentication"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref> <!-- this
line is necessary for every stack!!!! -->
</interceptor-stack>
<interceptor-stack name="pageStack">
<interceptor-ref name="query"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<action name="searchCiudad" class="com.WindThunder.action.VueloAction"
method="searchCiudad">
<interceptor-ref name="pageStack"/>
<result name="success">/listaCiudads.jsp</result>
<result name="error">/common/error.jsp</result>
<result name="vacio">/common/listaVacia.jsp</result>
</action>
我的QueryInterceptor.java
:
@Override
public String intercept(ActionInvocation invocation) throws Exception {
//get previous action name = pagePath. (/searchxxx.action)
this.session = invocation.getInvocationContext().getSession();
HttpServletRequest request = ServletActionContext.getRequest();
String path = request.getRequestURI(); //contaits domain
String pagePath = path.substring(path.lastIndexOf("/"));
//get previous query string (param1=xx¶m2=xx, or null)
String queryString = request.getQueryString();
addParamToSession(queryString, session);
String prePage = "";
if (!pagePath.equalsIgnoreCase("/login.action")){
prePage = pagePath;
}
if (prePage != null && !prePage.equals("")){
session.put("prePage",prePage);
}
return invocation.invoke();
}
现在我想"soloIda"
直接从中获取参数request
并进行一些手动分配,但我认为这是 Struts 1 的工作方式。知道为什么它不起作用吗?我一定做错了什么。