Мое решение
Мои элементы кнопок HTML в моей всегда видимой навигации:
<a href="#mmenu" class="mobile-nav">Open current menu panel</a>
<a class="mobile-lang">Open languages panel</a>
Мой JS
var currentMMStep = "menu-panel";
$("#mmenu").mmenu({
// options
pageScroll: {
scroll: true,
update: true // pageScroll options
},
extensions: [
"pagedim-black",
"position-front",
"position-right",
"shadow-panels"
],
navbars: [{
"position": "top",
"type": "tabs",
"content": [
"<a href='#menu-panel' id='the-menu-panel'>" + mmenuMenu + "</a>",
"<a href='#languages-panel'>" + mmenuLanguages + "</a>"
]
}]
}, {
// configuration
clone: false,
offCanvas: {
pageSelector: "#page-wrap"
}
});
var api = $("#mmenu").data( "mmenu" );
$(".mobile-lang").on("click", function() {
api.open().openPanel( $("#languages-panel") );
});
api.bind( "openPanel:before", function( $panel ) {
if(!$("#languages-panel").hasClass("mm-panel_opened")){
currentMMStep = $(".mm-panel_opened").attr("id");
$("#the-menu-panel").attr('href', "#" + currentMMStep);
}
});
api.bind( "openPanel:finish", function( $panel ) {
if(!$("#languages-panel").hasClass("mm-panel_opened")){
currentMMStep = $(".mm-panel_opened").attr("id");
$("#the-menu-panel").attr('href', "#" + currentMMStep);
}
});
api.bind("closeAllPanels:before", function() {
$("#the-menu-panel").data('href', "#" + currentMMStep);
});
//because we alter the #menu-panel href on the Menu tab it removes the selected class when clicking the mm-navbar__title...
$(".mm-navbar__title").on("click", function() {
setTimeout(function(){
$(".mm-navbar_tabs a:first-child").addClass("mm-navbar__tab_selected");
}, 40);
});
Можно использовать request.getMethod () для получения любого Метода. Я использую HandlerInterceptor для этого.
проверка этот код:
public class LoggingMethodInterceptor implements HandlerInterceptor {
Logger log = LoggerFactory.getLogger(LoggingMethodInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
log.info("[START] [" + request.getMethod() + "] [" + request.getRequestURL() + "] StartTime: {} milliseconds",
System.currentTimeMillis());
return true;
}
Нет прямого пути. Непрямой - проверьте .getQueryString ()
HttpServletRequest.getMethod () :
Возвращает имя метода HTTP, с помощью которого был выполнен этот запрос, например GET, POST или PUT. То же, что и значение переменной REQUEST_METHOD CGI.
Все, что вам нужно сделать, это:
boolean isPost = "POST".equals(request.getMethod());
Также я действительно не понимаю, почему вы просто не использовали request.getParameter ("somename")
для получения значений, отправленных в качестве параметров запроса. Этот метод возвращает параметр независимо от того, был ли запрос отправлен через GET или POST :
Параметры запроса - это дополнительная информация, отправляемая с запросом. Для сервлетов HTTP параметры содержатся в строке запроса или опубликованных данных формы.
Это намного проще, чем пытаться разобрать getQueryString ()
самостоятельно.
Почему бы вам не начать с проверки параметров строки запроса, если вы их не видите, принять сообщение и затем откопать переменные формы?
Если вы пишете сервлет, вы можете сделать это различие по тому, вызывается ли метод doGet или doPost .
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException{
//Set a variable or invoke the GET specific logic
handleRequest(request, response);
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException{
//Set a variable or invoke the POST specific logic
handleRequest(request, response);
}
public void handleRequest(HttpServletRequest request,
HttpServletResponse response)
throws ServletException{
//Do stuff with the request
}
Я знаю, что это не решает вашу проблему, но, если я правильно помню, при использовании Struts ActionForm будет заполнен, если ваши переменные отправлены в строке запроса или в теле сообщения.
Я нашел исходный код для класса RequestUtils, возможно, вам нужен метод "populate":