2013-02-23 1 views
1

blobstore upload form JSP 페이지를 jQuery Mobile 1.3.0을 사용하여 디자인 할 때 매우 드문 문제가 있습니다. 아래 코드를 게시하고 있습니다.jQuery Mobile에서 GAE Blobstore 예외

<%@ 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) 

나는 도서관 모든 것을 절대적으로 잘 작동 일반 CSS와 jQuery를 사용하여 간단한 JSP 페이지를 사용하여 업로드하려고합니다. 이 문제가 발생하는 이유

<%@ 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를 사용하지 않고 설문지를 제출하려면 <form> 태그에 data-ajax=”false” 데이터 속성을 추가하여 사용 중지 할 수 있습니다.

이 정보가 도움이되기를 바랍니다.

+1

http://view.jquerymobile.com/1.3.0/docs/widgets/forms/의 하단을 기반으로 한 결과입니다. –

+0

@Tolis 귀하의 의견에 많은 감사드립니다. 그것은 일하기 시작했습니다. –

+0

@AnkurJain 환영합니다. –

1

나는 Tolis가 이것에 대한 답을 가지고 있다고 생각한다. 그래서 나는 당신의 제안이 필요하다.

이것은 가능한 가장 작은 테스트 케이스 (또는 적어도 이보다 작은 테스트 케이스)로 실패를 줄이는 데 도움이되는 종류의 문제입니다. 이것은 여러 가지면에서 도움이됩니다. 첫째, 여러분이 만들었을지도 모르는 어려운 오타를 보는 것입니다. (내가 실수로 "multipart/form-date"를 입력 할 때마다 니켈을 먹었을 때 ...하지만 여분의 불규칙한 부분이 많이있을 때는 발견하기가 어렵습니다.)

두 번째로 산만을 제거함으로써 당신에게 도움이되지 않는 물건을 덜줌으로써 당신을 도우려고합니다.

셋째, 버그를 발견하면 간단한 테스트 케이스를 통해 빠르게 수정 될 가능성이 크게 높아집니다. 이 특별한 경우

, 나는 심각하게 spring 또는 css 중 하나가 당신이보고있는 행동과는 아무것도이 있는지 의심한다. 표시되는 비헤이비어가 변경되지 않는 한 파일이 아닌 입력 필드도 이동할 수 있습니다.