У меня есть параметры загрузки mulitple, вызывающие тот же сервлет для обработки. Я использую параметры для дифференцирования вызовов от GWT и каждый раз задаю ответ на обработку файла. resopnse вызывается нормально, но поджигатель отладчик говорит, что его не в состоянии распознать функциюФункция JSNI не распознается при вызове с сервлета
TypeError: window.parent.uploadCompleteXls is not a function
Ниже приведен код сервлета, который я использую, чтобы установить поведение
public class UploadServlet extends HttpServlet {
.
.
setResponseXls(response,message)
}
public void setResponseXls(HttpServletResponse response, String message)
{
response.setContentType("text/html");
response.setHeader("Pragma", "No-cache");
response.setDateHeader("Expires", 0);
response.setHeader("Cache-Control", "no-cache");
PrintWriter out;
try {
out = response.getWriter();
out.println("<html>");
out.println("<body>");
out.println("<script type=\"text/javascript\">");
out.println("window.parent.uploadCompleteXls('" + message + "');");
out.println("</script>");
out.println("</body>");
out.println("</html>");
out.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Я написал метод JSNI в моем классе GWT, который расширяет окно, как показано ниже.
private static native void initComplete(ProjectRunWindow uploadWindow) /*-{
$wnd.uploadCompleteXls = $entry(function(fileName) {
[email protected]::uploadCompleteXls(Ljava/lang/String;)(fileName);
});
}-*/;
public void uploadCompleteXls(String status) {
if (!status.equalsIgnoreCase("SUCCESS")) {
SC.say(status);
}
Ответ не возвращается в GWT. Ирония - это то же синтаксис, что и в другом классе gwt, который расширяет окно. Он отлично работает в другом классе !!!.
Не забудьте избежать 'сообщения'! Если у вас есть '' 'или' 'в сообщении, в лучшем случае код не будет работать, и в худшем случае вы будете подвергать своих пользователей атакам XSS какого-то рода! –
Вы предлагаете некоторые изменения в существующем коде, который я дал? – Jess
Да, хотя это, вероятно, не связано с проблемой, которую вы испытываете. Ваша переменная «сообщение» в сервлете может потенциально подвергнуть ваших пользователей какой-либо форме атаки JS с инъекцией. Избегайте текста в «сообщении», чтобы предотвратить это. –