Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
vaadin 7 URL参数_Url_Request_Vaadin - Fatal编程技术网

vaadin 7 URL参数

vaadin 7 URL参数,url,request,vaadin,Url,Request,Vaadin,我对瓦丁7不太熟悉,我想不出这一点。我尝试使用谷歌,但没有任何有用的结果 我的问题很简单。如何在UI类中获取请求url参数 我的url有一个参数:host/myvaadinapp/?code=erefdvdfgftftftftft… url参数来自用户登录后的facebook(OAuth),我需要在代码中处理CodeURL参数的值 我试着这样做: @PreserveOnRefresh public class AdminUi extends UI { @O

我对瓦丁7不太熟悉,我想不出这一点。我尝试使用谷歌,但没有任何有用的结果

我的问题很简单。如何在UI类中获取请求url参数

我的url有一个参数:
host/myvaadinapp/?code=erefdvdfgftftftftft…

url参数来自用户登录后的facebook(OAuth),我需要在代码中处理CodeURL参数的值

我试着这样做:

    @PreserveOnRefresh
    public class AdminUi extends UI
    {
        @Override
        protected void init(VaadinRequest request)
        {
            ...
            System.out.println( request.getPathInfo());
            System.out.println( request.getRemoteHost());
            System.out.println( request.getParameterMap().size());
            System.out.println( request.getAttribute("code") );
            System.out.println( request.getParameter("code") );
            ...
        }
    }
结果: request.getAttribute(“代码”):null request.getParameter(“代码”):null

我意识到getParameterMap()有一个“v-loc”参数。但是如果我使用它变量,我必须编写一些代码来从该变量获取url参数:

v-loc:
host/myvaadinapp/?code=erefdvdfgftftftftft…
主题:驯鹿 v-rtzo:-600 v-dston:错误

我认为,这不是一个很好的解决方案

您能帮助我如何在vaadin中获取原始url参数吗

多谢各位


我的评论是:

我试图使用request.getParameter(“代码”),但它不起作用。我不知道为什么

我原来的url是:
host/demoVaadinApp/?name=zzz

我使用了以下代码:

    public class Xxxx extends UI
    {
        /**
     * Main UI
     */
    @Override
    protected void init(VaadinRequest request)
    {
        String name = request.getParameter("name");
        if (name == null)
            {
            name = "Unknown";
        }

        setContent(new Label("Hello " + name));
        }
    }
我以嵌入UI模式启动我的vaadin应用程序

my web.xml文件的内容:

<!-- ******************************************************************* -->
<!-- context parameters                                                  -->
<!-- ******************************************************************* -->
<context-param>
    <description>Vaadin production mode</description>
    <param-name>productionMode</param-name>
    <param-value>false</param-value>
</context-param>

<!-- ******************************************************************* -->
<!-- servlet definition                                                  -->
<!-- ******************************************************************* -->
<!-- +++++ Vaadin  servlet +++++++++++++++++++++++++++++++++++++++++++++ -->
<servlet>
    <servlet-name>VaadinServlet</servlet-name>
    <servlet-class>com.vaadin.server.VaadinServlet</servlet-class>
    <init-param>
        <description>Vaadin UI class</description>
        <param-name>UI</param-name>
        <param-value>com.coupoholics.ui.admin.AdminUi</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>VaadinServlet</servlet-name>
    <url-pattern>/VAADIN/*</url-pattern>
</servlet-mapping>

<!-- ******************************************************************* -->
<!-- welcome file list definition                                        -->
<!-- ******************************************************************* -->
<welcome-file-list>
    <welcome-file>index.html</welcome-file>
</welcome-file-list>

瓦丁生产模式
生产模式
假的
瓦迪尼
com.vaadin.server.VaadinServlet
瓦丁类
用户界面
com.coupoholics.ui.admin.AdminUi
瓦迪尼
/瓦丁/*
index.html
index.html:


您必须在浏览器中启用javascript才能使用此应用程序。
//

我的结果是: 你好,未知

如果我不使用嵌入UI模式,那么一切都很好

问题在哪里


解决方案(感谢您的LeifÅstrand):

var urlParts=window.location.href.split(“?”)

var queryString=(urlParts.length==1)?“:”?“+urlParts[1]

queryString=(urlParts.length==0)?“”:queryString.split(“#”)[0]

“浏览器详细信息”:“VAADIN”+查询字符串,

完整源代码:

    <!--  Initializing the UI -->
    <script type="text/javascript">
        var urlParts = window.location.href.split("?");
        var queryString = (urlParts.length == 1) ? "" : "?" + urlParts[1];
        queryString = (urlParts.length == 0) ? "" : queryString.split("#")[0];

        //<![CDATA[
            if (!window.vaadin)
                alert("Failed to load the bootstrap JavaScript:" + "VAADIN/vaadinBootstrap.js");

            /* The UI Configuration */
            vaadin.initApplication("content-body", {
              "browserDetailsUrl": "VAADIN" + queryString,
              "serviceUrl": "VAADIN",
                          ...

var urlParts=window.location.href.split(“?”);
变量queryString=(urlParts.length==1)?“:”?“+urlParts[1];
queryString=(urlParts.length==0)?“”:queryString.split(“#”)[0];

// 它应该使用:request.getParameter(“代码”)

此行为的原因是,
UI.init
是从一个请求中调用的,该请求并不总是针对用于加载应用程序的同一URL发出的。当嵌入UI而不是将其作为独立应用程序时,情况尤其如此

UI init请求(在代码的某些部分中称为“browser details request”)默认发送到用于加载页面的同一URL。这在嵌入时显然不起作用,因为没有映射到该URL的Vaadin servlet,因此您必须定义一个
browserDetailsUrl
来告诉请求应该发送到哪里

您观察到的
v-loc
在内部用于初始化
Page.getLocation()
返回的值

为了解决您的特定问题,我建议您选择以下选项之一:

  • 动态生成
    browserDetailsUrl
    以包含所需参数作为查询参数,例如
    “browserDetailsUrl”:“VAADIN?code=erefdvdfgftftft”
  • Page.getLocation().getQuery()
    中提取值。与使用您发现的
    v-loc
    相比,这稍微不那么难看,因为它不依赖任何实现细节

  • 谢谢你的回答。是的,这个代码应该有效。这个维基页面很好地描述了一切:我花了很多时间来解决我的问题,我意识到我的问题是什么。但我还不能解决它。我使用嵌入UI模式,我认为这就是问题所在。若我不使用嵌入UI模式,那个么request.getParameter(“代码”)就会工作。请阅读我上面的评论。谢谢,谢谢你的回答!我解决了这个问题,并在上面分享了我的解决方案。
        <!--  Initializing the UI -->
        <script type="text/javascript">
            var urlParts = window.location.href.split("?");
            var queryString = (urlParts.length == 1) ? "" : "?" + urlParts[1];
            queryString = (urlParts.length == 0) ? "" : queryString.split("#")[0];
    
            //<![CDATA[
                if (!window.vaadin)
                    alert("Failed to load the bootstrap JavaScript:" + "VAADIN/vaadinBootstrap.js");
    
                /* The UI Configuration */
                vaadin.initApplication("content-body", {
                  "browserDetailsUrl": "VAADIN" + queryString,
                  "serviceUrl": "VAADIN",
                              ...