Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.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/2/jquery/88.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
Java JQuery地址管理应用程序状态的简单示例_Java_Jquery_Playframework_Url Routing_Fragment Identifier - Fatal编程技术网

Java JQuery地址管理应用程序状态的简单示例

Java JQuery地址管理应用程序状态的简单示例,java,jquery,playframework,url-routing,fragment-identifier,Java,Jquery,Playframework,Url Routing,Fragment Identifier,我正在使用jQuery地址库根据用户在页面中所做的操作来重写我的URL。这样做的目的是允许用户为页面添加书签,然后再回来。页面永远不会刷新,因为所有服务器交互都是通过ajax完成的 jQuery地址正在编写如下URL: 我需要在游戏中设置一个路由,以便能够将该请求路由到相应的控制器。所以我设置了这个: GET /#/u/{username} Controller.showUser 但这不起作用,路由定义被忽略。我尝试过很多事情,比如尝试转义“#”,并用我

我正在使用jQuery地址库根据用户在页面中所做的操作来重写我的URL。这样做的目的是允许用户为页面添加书签,然后再回来。页面永远不会刷新,因为所有服务器交互都是通过ajax完成的

jQuery地址正在编写如下URL:

我需要在游戏中设置一个路由,以便能够将该请求路由到相应的控制器。所以我设置了这个:

GET     /#/u/{username}                Controller.showUser
但这不起作用,路由定义被忽略。我尝试过很多事情,比如尝试转义“#”,并用我用Character.toString(35)填充的变量替换它。这些都不管用

有人知道我如何正确定义路由,或者让jQuery地址不写“#”

编辑:不会将“#”发送到服务器,而是执行此操作。啊!好的,问题已经修改。

否。
#
和之后的URL部分未发送到服务器。因此,服务器上的play应用程序将永远不会看到此类URL

HTML5解决方案 您需要使用JavaScript在客户端处理这些URL。在支持HTML5的现代浏览器中,您可以修改地址而无需重新加载页面。有关如何为这些浏览器执行此操作的信息,请参见。有关浏览器支持的信息,请参阅

#-网址 在Internet Explorer和其他浏览器的旧版本上,您需要使用
#
URL并使用JavaScript加载状态(例如,在您的示例中,获取用户页面
/u/scott#u tiger
)。有关如何在JavaScript中执行此操作的信息,请参见。此外,如果用户将带有
#
-URL的页面作为书签,则需要重新加载状态

另见:

JavaScript库 例如,您可以使用JavaScript库来处理此问题。像Backbone.js这样更大的框架也可以处理这个问题


有人知道我如何获得jQuery地址而不写“#”吗

如果不编写URL的
#
-部分,则无法链接状态。因此,如果您将页面添加到书签,则无法返回到Scott Tigers个人资料页面,因为URL仅为
http://localhost:9000/
您将登上头版,而用户认为他将到达配置文件页面。

否。
和之后的URL部分未发送到服务器。因此,服务器上的play应用程序将永远不会看到此类URL

HTML5解决方案 您需要使用JavaScript在客户端处理这些URL。在支持HTML5的现代浏览器中,您可以修改地址而无需重新加载页面。有关如何为这些浏览器执行此操作的信息,请参见。有关浏览器支持的信息,请参阅

#-网址 在Internet Explorer和其他浏览器的旧版本上,您需要使用
#
URL并使用JavaScript加载状态(例如,在您的示例中,获取用户页面
/u/scott#u tiger
)。有关如何在JavaScript中执行此操作的信息,请参见。此外,如果用户将带有
#
-URL的页面作为书签,则需要重新加载状态

另见:

JavaScript库 例如,您可以使用JavaScript库来处理此问题。像Backbone.js这样更大的框架也可以处理这个问题


有人知道我如何获得jQuery地址而不写“#”吗


如果不编写URL的
#
-部分,则无法链接状态。因此,如果您将页面添加到书签,则无法返回到Scott Tigers个人资料页面,因为URL仅为
http://localhost:9000/
你会出现在头版,而用户认为他会出现在个人资料页面。

我对URL的新理解(谢谢@Jonas)我意识到我错过了故事的一半

我正在使用更改URL,具体取决于您在应用程序中单击的内容。这在很多浏览器上都非常有效。我缺少的是监视外部地址更改(书签、历史记录、后退/前进)并相应地做出响应。i、 e.通过触发适当的Ajax调用并适当地呈现数据,正确设置页面

更改地址 恢复国家
有了对URL的新理解(谢谢@Jonas),我意识到我错过了故事的一半

我正在使用更改URL,具体取决于您在应用程序中单击的内容。这在很多浏览器上都非常有效。我缺少的是监视外部地址更改(书签、历史记录、后退/前进)并相应地做出响应。i、 e.通过触发适当的Ajax调用并适当地呈现数据,正确设置页面

更改地址 恢复国家
你完全正确。谢谢知道如何在不刷新页面的情况下动态重新写入URL吗?只需删除jQuery地址的#/重写逻辑,您就可以很好地使用路由。不知道如何阻止jQuery地址插件包含“#”。我会调查的。谢谢。@Jonas:我想我今天有点昏昏欲睡(这是漫长的一周,我需要咖啡),我看不出有什么关系。这里的基本要求是,当用户单击页面上的链接时,我想更改URL。然后,如果他们将该链接添加到书签中,我希望Play将请求路由到一个控制器,该控制器将重新加载该页面。jQuery地址插件看起来很适合重新编写URL,但据我所知,它只能在中写入带“#”的URL。@MattBiggin:只有在支持HTML5的浏览器中,您才可以更改URL,而无需重新加载页面或使用
(请参阅我链接的Mozilla文章)像Internet Explorer和其他浏览器的旧版本,你可以使用
#
链接,但是当他们访问这样的链接时,你需要使用javascript来重新加载该状态(请参阅我链接到的问题)。你完全正确。谢谢知道如何在不刷新页面的情况下动态地重新编写URL吗?只需删除jQuery地址的#/重写逻辑,您就可以使用路由JU了
$.address.title("new title describing application state");
$.address.parameter("q", "val1");
$.address.parameter("g", "val2");
$.address.update();
$.address.externalChange(function(event) {
    var val1 = event.parameters["q"];
    var val2 = event.parameters["g"];
    // do something with those values
});