#ajax #jquery #struts
#ajax #jquery #struts
Вопрос:
Я пытаюсь вызвать сервлет действия createLabel.сделать, но похоже, что класс action не вызывается. Я использовал firebug для отладки, и похоже, что этот URL вызывается, но ответа не получено.
Вот функция javascript:
<script type="text/javascript" charset="utf-8">
$(function() {
$("#createLabel").click(function() {
$.ajax( {
type: "POST",
url: "/createLabel.do",
dataType: "json",
contentType: "application/json; charset=utf-8",
data: { lab_no: $("#labNum").val(),accNum: $("#accNum").val(), label: $("#label").val() },
success: function() {
alert("success");
}
});
});
});
</script>
Вот мой класс действий:
public class CreateLabelAction extends Action{
public ActionForward execute (ActionMapping mapping, HttpServletRequest request, HttpServletResponse response){
String label = request.getParameter("label");
String lab_no = request.getParameter("lab_no");
String accNum = request.getParameter("accNum");
response.setContentType("application/json");
try {
DB db = new DB(DB.DATA);
Connection conn = db.GetConnection();
String insertstmt = "update Info set label='" label "' where lab_no=" lab_no " and accNum='" accNum "'";
logger.info(insertstmt);
PreparedStatement pstmt = conn.prepareStatement(insertstmt);
pstmt.executeUpdate();
pstmt.close();
db.closeConn();
logger.info("Label created successfully.");
} catch (Exception e){
logger.error("Error inserting label into Info" e);
request.setAttribute("error", "There was an error creating a label.");
}
logger.info("Label =" label);
label = StringEscapeUtils.escapeJavaScript(label);
return mapping.findForward("complete");
}
}
Вот конфигурация в struts-config.xml:
<action input="/labDi.jsp" name="LabelForm" path="/createLabel" scope="request" type="all.pageUtil.CreateLabelAction">
<forward name="complete" path="/labDi.jsp" />
</action>
Может кто-нибудь, пожалуйста, сказать мне, почему класс action не вызывается? Заранее спасибо.
Комментарии:
1. Какой тип элемента DOM
#createLabel
? Кнопка отправки, ссылка, стандартная кнопка, div, …?2. стандартная кнопка: <тип ввода=»кнопка» идентификатор =»createLabel» значение =»Создать»>
3. Эта кнопка находится внутри формы? Что вы видите в FireBug при нажатии на кнопку? Отправляется ли запрос AJAX?
4. Попробуйте изменить
dataType
на текст, чтобы вы могли выяснить, заключается ли проблема в получении ответа или в получении действительного ответа.5. да, это внутри формы. Я вижу это «СООБЩЕНИЕ https://…/createLabelTDIS.do 200OK 19 мс» с пустой вкладкой ответа
Ответ №1:
Вы определяете поведение внутри вызываемого метода processRequest
, о котором Struts ничего не знает (если только это не a DispatchAction
и вы не включаете параметр токена, которым он не является, и вы этого не делаете).
Вызывается метод обработки запросов Struts 1 по умолчанию execute
.
1.x: http://struts.apache.org/1.x/apidocs/org/apache/struts/action/Action.html
1.2: http://struts.apache.org/1.2.9/api/org/apache/struts/action/Action.html
1.1: http://struts.apache.org/1.1/api/org/apache/struts/action/Action.html
Я не знаю, почему вы ожидаете, что это сработает. Если вы создаете «сервлет действия» для обработки обычных запросов Struts 1, вы делаете это неправильно. Запросы Struts обрабатываются Action
s (которые вы правильно подклассируете) во всех ситуациях, кроме самых необычных.
Сервлет action фиксирует запросы, предназначенные для Struts, и использует соответствующий процессор запросов Struts для поиска и вызова действия запроса. (Наряду с другими связанными с этим домашними делами.)
Я бы рекомендовал ознакомиться с некоторыми руководствами или документацией по Struts 1, если вам действительно нужно с этим работать.
Комментарии:
1. хорошо, теперь я изменил метод ProcessRequest. Пожалуйста, посмотрите на измененный код. это все еще не работает.
2. @Sapphire по-прежнему неверная подпись. Вам также необходимо включить конфигурацию сопоставления действий.
3. как в? Я включил прямое имя «complete» в struts-config.xml как показано выше … если вы это имеете в виду.
4. @Sapphire Вам также необходимо убедиться, что независимо от того, какое у вас определение формы, оно является действительным, хотя вы полностью игнорируете его в действии.
5. @EmanueleGiarlini Документов S1 больше нет в Сети, но их можно загрузить.
Ответ №2:
//Вот рабочий ajax-код, который отправляет запрос в класс struts action .
function userExists(userid){
var exists = false;
$.ajax({
type: "POST",
url: "./searchUser.do",
data: "userid=" userid,
success: function(response){
exists = true;
},
error: function(e){
alert('Error: ' e);
}
});
return exists;
}
// Удачи..
Хари