【问题标题】:Wicket http post, get raw data from servletrequest?Wicket http post,从 servletrequest 获取原始数据?
【发布时间】:2013-07-26 07:55:52
【问题描述】:

我尝试将一些数据发布到 Wicket 网页。如果数据在表单中,这可以正常工作。但是,我想用 jQuery 的 ajax-post 发布数据。我无法在我的页面构造函数中获取这些数据。

这是我的 jquery 命令:

$.ajax({
                    type: "post",
                    cache: false,
                    url: "http://localhost:8888/testjson",
                    data: JSON.stringify({"aap":"noot"),

                    contentType: 'application/json',
                    success: function(ydata){alert("aap");},
                    failure: function(errMsg) {alert(errMsg);},
                        contentType: false,
                    dataType: "json"
                });

/testjson 是一个挂载的网页。

public TestJsonApiPage( PageParameters pp )
{
    try
    {
        byte[] data = IOUtils.toByteArray( ( (ServletWebRequest) TestJsonApiPage.this.getRequest() ).getContainerRequest().getInputStream() );
    }
    catch ( IOException e )
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

这是构造函数。我看到发生的是输入流是空的。但是,在调试时,我在newWebRequest 中的HttpServletRequest 中看到了我在WicketApplication 中发布的原始数据

tl;dr 如何在 Wicket Page 中获取原始帖子数据?

【问题讨论】:

    标签: ajax servlets post wicket


    【解决方案1】:

    似乎Page 对后参数做了一些事情。

    我的问题的解决方案是使用资源。

        public class MyResource extends AbstractResource
        @Override
        protected ResourceResponse newResourceResponse( Attributes attributes )
        {
    
            ResourceResponse resourceResponse = new ResourceResponse();
            resourceResponse.setContentType( "text/json" );
            resourceResponse.setTextEncoding( "utf-8" );
    
            HttpServletRequest request = (HttpServletRequest) attributes.getRequest().getContainerRequest();
    
            try
            {
                this.json = IOUtils.toString( request.getInputStream() );
            }
            catch ( IOException e )
            {
                e.printStackTrace();
            }
    
            resourceResponse.setWriteCallback( new WriteCallback()
            {
                @Override
                public void writeData( Attributes attributes ) throws IOException
                {
                    OutputStream outputStream = attributes.getResponse().getOutputStream();
                    Writer writer = new OutputStreamWriter( outputStream );
    
    
                    writer.write( MyResource.this.json );
                    writer.close();
                }
            } );
    
            return resourceResponse;
        }
    

    【讨论】:

    • 如何将 URL 附加到该资源?
    • 通过安装它。另请参阅这篇出色的文章:java.dzone.com/articles/how-implement-rss-feeds-custom
    • 但是当资源/页面需要授权时,似乎不可能做到这一点?似乎我们必须等待 Wicket 7 支持:issues.apache.org/jira/browse/WICKET-5012
    • 好的...所以即使我之前评论中提到的文章表明资源未经授权,我的测试表明它们是...但似乎即使有资源,PageParameters 仍然会吞下输入流...我现在怀疑挂载路径中的参数正在执行此操作。将在挂载路径中不带任何参数进行测试并返回报告。
    • 确实是挂载路径中的参数。如果您映射到其中没有参数的安装路径,那么 Wicket 会单独保留输入流。另外,我发现了为什么该页面似乎仍在被授权。这是因为在我们的设置中,我们使用的是容器管理身份验证。所以实际上容器(在我们的例子中是 Tomcat)在您未登录时正在拦截对资源的请求。这对我们来说实际上是可以的。
    猜你喜欢
    • 1970-01-01
    • 2012-10-24
    • 2010-10-28
    • 1970-01-01
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    • 2014-08-01
    相关资源
    最近更新 更多