Я хочу отправить форму своему классу действий с помощью Struts 2 classic getter/setter
. Все остальные поля получают свою ценность, за исключением поля boolean
, которое остается false
, когда я устанавливаю флажок в нем.Значение флажка `on` не передается классу Action. Должен ли я получить параметр из HttpServletRequest напрямую?
У меня есть флажок, как это в моем JSP:
<div class="col-md-3">
<input class="input-md" type="checkbox" id="soloIdaId" name="soloIda" />
</div>
И в моем классе действий, у меня есть:
private boolean soloIda;
и его геттер/сеттер. Но он остается ложным, когда я проверил его.
Я заметил, что в 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 способ работы. Любая идея, почему она не работает? Я должен делать что-то неправильно.
Извините за поздний ответ. Я не знаю, почему, но '' не соответствует моим правилам Boostrap CSS, а '' отлично. И наконец, поэтому я решил использовать '' и получить параметры с 'HttpServletSession' напрямую ... Но в любом случае спасибо. Это не проект для производства, а только домашняя работа, поэтому я часто теряю руки сейчас. Но я приму ваш ответ и сохраню его для использования, потому что вы предоставляете отличные ссылки и много информации здесь. –
FaithReaper
@FaithReaper не сдаётся: я точно знаю, почему он не соответствует вашим правилам CSS Bootstrap, [все это объяснено здесь] (http://stackoverflow.com/a/28558436/1654265). Затем, если вы не используете плагин Bootstrap (и вам не нужно, если вы уже знаете, как писать простой Bootstrap), просто добавьте 'theme =" simple "' в ваши ' ' теги. Вот и все. Я предлагаю вам попробовать, даже если вы уже переехали после этого, чтобы узнать лучшие практики вместо вуду, с которым вы столкнулись. Пожалуйста, рассмотрите ** upvoting ** ответ (-ы), который вам помог, это лучшее спасибо их авторам –
Я пробовал 'theme =" simple "', и это сработало, отлично! Но я не могу представить свою ценность моему классу action, который является «Integer». Когда я устанавливаю этот флажок, я хочу передать «ID» этого рейса в мой класс, но он не работает (ошибка в консоли: «Отсутствует ключ [invalid.fieldvalue.reservaChecked]» в пакетах [[org/apache/struts2/struts -messages, com/opensymphony/xwork2/xwork-messages]]! ', в то время как я установил' fieldValue = "true" '. Но' 'работает. Кроме того, я хочу, чтобы это было – FaithReaper