Note that there are some explanatory texts on larger screens.

plurals
  1. POSpring-MVC forms on GAE
    primarykey
    data
    text
    <p>I am trying to create a form using the Spring Framework, but according to this (http://groups.google.com/group/google-appengine-java/ browse_thread/thread/d93fd7385bf85bf7), I need to override initBinder. Well, I think I did that and it still doesn't work. </p> <p>My jsp (priceincreasejsp):</p> <pre><code>&lt;%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" session="false" %&gt; &lt;%@ taglib prefix="form" uri="http://www.springframework.org/tags/ form" %&gt; &lt;form:form method="post" commandName="priceIncrease"&gt; Increase (%): &lt;form:input path="percentage"/&gt; &lt;input type="submit" value="Execute"&gt; &lt;/form:form&gt; </code></pre> <p>myapp-servlet.xml has the following:</p> <pre><code>&lt;bean name="/priceincrease.htm" class="myapp.web.PriceIncreaseFormController"&gt; &lt;property name="sessionForm" value="true"/&gt; &lt;property name="commandName" value="priceIncrease"/&gt; &lt;property name="commandClass" value="myapp.service.PriceIncrease"/ &gt; &lt;property name="validator"&gt; &lt;bean class="myapp.service.PriceIncreaseValidator"/&gt; &lt;/property&gt; &lt;property name="formView" value="priceincrease"/&gt; &lt;property name="successView" value="success.htm"/&gt; &lt;property name="productManager" ref="productManager" /&gt; &lt;/bean&gt; </code></pre> <p>PriceIncrease.java:</p> <pre><code>public class PriceIncrease implements Serializable { private Integer percentage; public void setPercentage(Integer i) { percentage = i; } public Integer getPercentage() { return percentage; } } </code></pre> <p>PriceIncreaseFormController.java:</p> <pre><code>public class PriceIncreaseFormController extends SimpleFormController { private ProductManager productManager; public ModelAndView onSubmit(Object command) throws ServletException { PriceIncrease priceIncrease = (PriceIncrease) command; Integer increase = priceIncrease.getPercentage(); productManager.increasePrice(increase); return new ModelAndView(new RedirectView(getSuccessView())); } public void initBinder(WebDataBinder binder, WebRequest request) { binder.registerCustomEditor(PriceIncrease.class, new PriceIncreaseEditor()); binder.registerCustomEditor(Integer.class, new CustomNumberEditor(Integer.class, true)); // use this instead? } public void setProductManager() {...} public ProductManager getProductManager {...} } </code></pre> <p>Finally, PriceIncreaseEditor.java: (this is probably wrong..)</p> <pre><code>public class PriceIncreaseEditor extends PropertyEditorSupport{ @Override public void setAsText(String text) throws IllegalArgumentException { Integer increase = new Integer(text); super.setValue(increase); } } </code></pre> <p>Stack trace:</p> <pre><code>org.springframework.web.servlet.tags.RequestContextAwareTag doStartTag: access denied (java.lang.RuntimePermission getClassLoader) java.security.AccessControlException: access denied (java.lang.RuntimePermission getClassLoader) at java.security.AccessControlContext.checkPermission(AccessControlContext.java: 355) at java.security.AccessController.checkPermission(AccessController.java: 567) at java.lang.SecurityManager.checkPermission(SecurityManager.java: 549) at com.google.apphosting.runtime.security.CustomSecurityManager.checkPermission(CustomSecurityManager.java: 45) at java.lang.ClassLoader.getSystemClassLoader(ClassLoader.java:1311) at org.springframework.beans.BeanUtils.findEditorByConvention(BeanUtils.java: 368) at org.springframework.validation.AbstractPropertyBindingResult.getCustomEditor(AbstractPropertyBindingResult.java: 110) at org.springframework.validation.AbstractPropertyBindingResult.formatFieldValue(AbstractPropertyBindingResult.java: 87) at org.springframework.validation.AbstractBindingResult.getFieldValue(AbstractBindingResult.java: 230) at org.springframework.web.servlet.support.BindStatus.&lt;init&gt;(BindStatus.java: 120) at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java: 172) at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java: 192) at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getName(AbstractDataBoundFormElementTag.java: 158) at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.autogenerateId(AbstractDataBoundFormElementTag.java: 145) at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.resolveId(AbstractDataBoundFormElementTag.java: 136) at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.writeDefaultAttributes(AbstractDataBoundFormElementTag.java: 120) at org.springframework.web.servlet.tags.form.AbstractHtmlElementTag.writeDefaultAttributes(AbstractHtmlElementTag.java: 379) at org.springframework.web.servlet.tags.form.InputTag.writeTagContent(InputTag.java: 139) at org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.java: 90) at org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java: 77) at org.apache.jsp.WEB_002dINF.jsp.priceincrease_jsp._jspx_meth_form_005finput_005f0(priceincrease_jsp.java: 149) at org.apache.jsp.WEB_002dINF.jsp.priceincrease_jsp._jspService(priceincrease_jsp.java: 82) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97) 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.handle(ServletHandler.java: 390) 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) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java: 418) at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:327) at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126) at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java: 240) at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java: 258) at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java: 1174) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java: 901) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java: 809) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java: 571) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java: 501) at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 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.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java: 97) at org.mortbay.jetty.servlet.ServletHandler $CachedChain.doFilter(ServletHandler.java:1157) at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java: 35) 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 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) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java: 418) at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java: 238) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java: 152) at org.mortbay.jetty.Server.handle(Server.java:326) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java: 542) at org.mortbay.jetty.HttpConnection $RequestHandler.headerComplete(HttpConnection.java:923) at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java: 76) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java: 135) at com.google.apphosting.runtime.JavaRuntime.handleRequest(JavaRuntime.java: 261) at com.google.apphosting.base.RuntimePb$EvaluationRuntime $6.handleBlockingRequest(RuntimePb.java:8495) at com.google.apphosting.base.RuntimePb$EvaluationRuntime $6.handleBlockingRequest(RuntimePb.java:8493) at com.google.net.rpc.impl.BlockingApplicationHandler.handleRequest(BlockingApplicationHandler.java: 24) at com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java: 435) at com.google.net.rpc.impl.Server$RpcTask.runInContext(Server.java: 572) at com.google.tracing.TraceContext$TraceContextRunnable $1.run(TraceContext.java:448) at com.google.tracing.TraceContext.runInContext(TraceContext.java: 688) at com.google.tracing.TraceContext $AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java: 326) at com.google.tracing.TraceContext $AbstractTraceContextCallback.runInInheritedContext(TraceContext.java: 318) at com.google.tracing.TraceContext $TraceContextRunnable.run(TraceContext.java:446) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java: 1110) at java.util.concurrent.ThreadPoolExecutor $Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:636) </code></pre> <p>I've been pretty stuck for a while now... Any ideas?</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload