vaadin 7 URL参数
我对瓦丁7不太熟悉,我想不出这一点。我尝试使用谷歌,但没有任何有用的结果 我的问题很简单。如何在UI类中获取请求url参数 我的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
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",
...