2013-02-23 4 views
1

У меня очень необычная проблема, когда я проектирую мою страницу blobstore upload form JSP с помощью jQuery Mobile 1.3.0. Я размещаю код ниже.Исключение GAE Blobstore в jQuery Mobile

<%@ page import="com.google.appengine.api.blobstore.BlobstoreServiceFactory"%> 
<%@ page import="com.google.appengine.api.blobstore.BlobstoreService"%> 
<head> 
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.css" /> 
<link rel="stylesheet" href="/css/common.css" /> 
<script src="http://code.jquery.com/jquery-1.8.2.min.js"></script> 
<script src="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.js"></script> 
</head> 
<body> 
<% 
    BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService(); 
%> 
<form method="POST" action="<%=blobstoreService.createUploadUrl("/upload")%>" 
    id="uploadImageForm" enctype="multipart/form-data"> 
    <label for="newsTitle">New Title</label> 
    <input type="text" name="newsTitle" id="newsTitle" placeholder="Please enter some title" /> 
    <div style="clear: both; width: 100%;"></div> 

    <label for="newsDescription">New Description</label> 
    <textarea name="newsDescription" id="newsDescription" placeholder="Please enter some description" rows="10"></textarea> 
    <div style="clear: both; width: 100%;"></div> 

    <label for="newsPic">Choose Image (if any)</label> 
    <input type="file" name="newsPic" id="newsPic" class="newsPic" /> 
    <div style="clear: both; width: 100%; height: 10px;"></div> 

    <input type="submit" name="submit" data-role="button" data-inline="true" value="Submit" /> 
    </form> 
</body> 

Я получаю это исключение, когда пытаюсь загрузить любой файл через эту форму в blobstore.

WARNING: Error for /_ah/upload/agpsdW1paW5uZXdzchsLEhVfX0Jsb2JVcGxvYWRTZXNzaW9uX18YOAw 
java.lang.OutOfMemoryError: Java heap space 
at java.util.Arrays.copyOf(Arrays.java:2786) 
at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:71) 
at javax.mail.internet.MimeMultipart.readTillFirstBoundary(MimeMultipart.java:245) 
at javax.mail.internet.MimeMultipart.parse(MimeMultipart.java:181) 
at javax.mail.internet.MimeMultipart.getCount(MimeMultipart.java:109) 
at com.google.appengine.api.blobstore.dev.UploadBlobServlet.handleUpload(UploadBlobServlet.java:146) 
at com.google.appengine.api.blobstore.dev.UploadBlobServlet.access$000(UploadBlobServlet.java:69) 
at com.google.appengine.api.blobstore.dev.UploadBlobServlet$1.run(UploadBlobServlet.java:112) 
at java.security.AccessController.doPrivileged(Native Method) 
at com.google.appengine.api.blobstore.dev.UploadBlobServlet.doPost(UploadBlobServlet.java:109) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) 
at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:110) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:61) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) 
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 

Когда я пытаюсь загрузить с использованием простой страницы JSP, используя обычную библиотеку css и jquery, все работает абсолютно нормально.

<%@ page 
import="com.google.appengine.api.blobstore.BlobstoreServiceFactory"%> 
<%@ page import="com.google.appengine.api.blobstore.BlobstoreService"%> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<meta name="viewport" content="width=device-width, initial-scale=1.0"> 
<title>News App : Upload New News</title> 

<link href="/bootstrap/css/bootstrap-responsive.css" type="text/css" 
rel="stylesheet" /> 
<link href="/bootstrap/css/bootstrap.css" type="text/css" 
rel="stylesheet" /> 
<script src="http://code.jquery.com/jquery-1.8.2.min.js" 
type="text/javascript"></script> 
<script src="/bootstrap/js/bootstrap.js" type="text/javascript"></script> 
</head> 
<body> 
<% 
    BlobstoreService blobstoreService = BlobstoreServiceFactory 
      .getBlobstoreService(); 
%> 
<div class="container-fluid"> 
    <div class="row-fluid"> 
     <div class="span1"></div> 
     <div class="span10"> 
      <ul class="nav nav-tabs"> 
       <li><a href="/">Home</a></li> 
       <li class="active"><a href="/newpost">Post New Topic</a></li> 
      </ul> 
      <form method="POST" 
       action="<%=blobstoreService.createUploadUrl("/upload")%>" 
       id="uploadImageForm" enctype="multipart/form-data"> 
       <fieldset> 
        <legend class="text-info">Upload Form</legend> 
        <label for="newsTitle">News Title</label> <input type="text" 
         name="newsTitle" id="newsTitle" class="span12" 
         placeholder="Type some title..." /> 
        <div class="clear"></div> 
        <label for="newsDescription">News Description</label> 
        <textarea class="textarea span12" name="newsDescription" 
         id="newsDescription" placeholder="Type some description..." 
         style="height: 70px;"></textarea> 
        <div class="clear"></div> 
        <label for="newsPic">Choose Picture</label> <input type="file" 
         name="newsPic" id="newsPic" placeholder="Type some title..." /> 
        <div class="clear"></div> 
        <input type="submit" class="btn btn-success" value="Submit" /> 
       </fieldset> 
      </form> 
     </div> 
     <div class="span1"></div> 
    </div> 
</div> 

Просто не могу понять, почему эта проблема возникает. Мне нужны ваши предложения.

ответ

2

Возможно, проблема связана с тем, что по умолчанию jQuery Mobile использует AJAX для отправки форм.

Для того, чтобы иметь возможность представить свои формы без использования AJAX вы можете отключить его, добавив атрибут data-ajax=”false” данных в <form> тега.

Надеюсь, это поможет.

+1

Основанный на основании http://view.jquerymobile.com/1.3.0/docs/widgets/forms/, это выглядит как фактор. –

+0

@Tolis Большое спасибо за ваши комментарии. Он начал работать. –

+0

@AnkurJain Добро пожаловать. –

1

Я подозреваю, что у Толиса есть ответ на этот вопрос, поэтому я сделаю снимок в части «Мне нужны ваши предложения».

Это та проблема, при которой она действительно помогает уменьшить отказ до наименьшего возможного тестового примера (или, по крайней мере, меньшего тестового примера, чем это). Это помогает несколькими способами: во-первых, это часто приводит к тому, что вы можете найти опечатку, которую вы могли бы сделать в противном случае. (Если бы у меня был никель для каждого случая, когда я случайно набрал «multipart/form-date» ... Но это трудно определить, когда есть много лишних помех.)

Во-вторых, устраняя отвлекающие факторы, это помогает людям, которые пытаются помочь вам, предоставив им менее неуместный материал, чтобы пробраться.

В-третьих, если вы обнаружили ошибку, простой тестовый пример значительно улучшает вероятность быстрого исправления.

В данном конкретном случае, я серьезно сомневаюсь, что либо spring или css имеют ничего делать с поведением вы видите. Также могут появляться поля ввода без файлов, если они не изменят поведение, которое вы видите.

Смежные вопросы