gpt4 book ai didi

url - vaadin 7 URL 参数

转载 作者:行者123 更新时间:2023-12-04 10:08:19 24 4
gpt4 key购买 nike

我对 vaadin 7 不太熟悉,我无法弄清楚这一点。我尝试使用谷歌但没有有用的结果。

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

我的网址有一个参数:host/myvaadinapp/?code=erefdvdfgftf...
url 参数在用户登录 (OAuth) 后来自 facebook,我需要在我的代码中处理 code url 参数的值。

我试图做这些:

    @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("code"): null
request.getParameter("code"): null

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

v-loc: host/myvaadinapp/?code=erefdvdfgftf...主题:驯鹿
v-rtzo:-600
v-dston: 假
...

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

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

谢谢你。

我的评论是:

我尝试使用 request.getParameter("code") 但它不起作用。我不知道为什么。

我原来的网址是: 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 应用程序。

我的 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>

索引.html:

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>

<body>
<script type="text/javascript" src="./VAADIN/vaadinBootstrap.js"></script>
<iframe tabindex="-1" id="__gwt_historyFrame" style="position: absolute; width: 0; height: 0; border: 0; overflow: hidden" src="javascript:false"></iframe>

<div id="content-body">
<!-- Optional placeholder for the loading indicator -->
<div class=" v-app-loading"></div>
<!-- Alternative fallback text -->
<noscript>You have to enable javascript in your browser to use this application.</noscript>
</div>

<!-- Initializing the UI -->
<script type="text/javascript">
//<![CDATA[
if (!window.vaadin)
alert("Failed to load the bootstrap JavaScript:" + "VAADIN/vaadinBootstrap.js");

/* The UI Configuration */
vaadin.initApplication("content-body", {
"browserDetailsUrl": "VAADIN",
"serviceUrl": "VAADIN",
"widgetset": "com.vaadin.DefaultWidgetSet",
"theme": "reindeer",
"versionInfo": {"vaadinVersion": "7.0.5"},
"vaadinDir": "VAADIN/",
"heartbeatInterval": 300,
"debug": true,
"standalone": false,
"authErrMsg": {
"message": "Take note of any unsaved data, "+
"and <u>click here<\/u> to continue.",
"caption": "Authentication problem"
},
"comErrMsg": {
"message": "Take note of any unsaved data, "+
"and <u>click here<\/u> to continue.",
"caption": "Communication problem"
},
"sessExpMsg": {
"message": "Take note of any unsaved data, "+
"and <u>click here<\/u> to continue.",
"caption": "Session Expired"
}
});//]]>
</script>

</body>

我的结果是:
你好未知。

如果我不使用嵌入 UI 模式,那么一切都运行良好。

问题出在哪儿?

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

var urlParts = window.location.href.split("?");

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

queryString = (urlParts.length == 0) ? "": queryString.split("#")[0];



"browserDetailsUrl": "VAADIN"+ queryString,

完整源代码:
    <!--  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",
...

最佳答案

这种行为的原因是 UI.init是从并不总是向用于加载应用程序的相同 URL 发出的请求中调用的。在嵌入 UI 而不是将其作为独立应用程序提供时尤其如此。

UI 初始化请求(在代码的某些部分称为“浏览器详细信息请求”)默认发送到用于加载页面的相同 URL。这在嵌入时显然不起作用,因为没有 Vaadin servlet 映射到该 URL,因此您必须定义一个 browserDetailsUrl来告诉应该将请求发送到哪里。
v-loc您观察到的内部用于初始化 Page.getLocation() 返回的值.

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

  • 动态生成 browserDetailsUrl包括所需的参数作为查询参数,例如"browserDetailsUrl": "VAADIN?code=erefdvdfgftf" .
  • Page.getLocation().getQuery() 中提取值.这比使用 v-loc 稍微不那么难看您发现的,因为它不依赖于任何实现细节。
  • 关于url - vaadin 7 URL 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16493773/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com