Tre*_*kaz 1 java wicket stateless
我有一些Wicket页面,如下所示:
(HomePage.html)
<html>
<head>
<title>Front</title>
<link wicket:id="applicationCss" rel="stylesheet" type="text/css"
href="stylesheets/application.css"/>
</head>
<body>
<!-- Content unnecessary -->
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
(HomePage.java)
public class HomePage extends AbstractWebPage {
public HomePage() {
// Nothing necessary (real application initialises some other links here.)
}
}
Run Code Online (Sandbox Code Playgroud)
(AbstractWebPage.java)
public abstract class AbstractWebPage extends WebPage {
protected AbstractWebPage() {
setStatelessHint(true);
// *** the trouble-maker:
add(new ResourceLink<>(
"applicationCss",
new CssResourceReference(AbstractWebPage.class,
"stylesheets/application.css")));
}
}
Run Code Online (Sandbox Code Playgroud)
当我访问我的主页时/admin
,浏览器会立即重定向到/admin?0
,表明该页面不是无状态的.但是,我唯一添加的是一个链接,据我所知,通过阅读代码,它不是有状态的.
当然,如果我删除<link>
HTML 中的标记和AbstractWebPage中的add()语句,页面将返回无状态.
我究竟做错了什么?理想情况下,我希望用户看到的任何URL都是无状态的,但只要在所有页面上都包含样式表,突然之间所有无状态页面都是有状态的,没有明显的原因.
而不是添加ResourceLink
,覆盖适用于此类(标题)链接的方法:
@Override
public void renderHead(IHeaderResponse response) {
super.renderHead(response);
response.renderCSSReference(new ResourceReference(AbstractWebPage.class, "stylesheets/application.css"));
}
Run Code Online (Sandbox Code Playgroud)
这不应该使您的页面有状态.然后还有一个额外的好处,就是不必在标记中添加任何内容.
这也适用于组件和行为,使您能够在较低级别封装依赖项.Wicket将过滤重复项(前提是您向资源引用添加唯一键).
不幸的是,它确实为您的头部添加了额外的链接,因此请谨慎使用自己的JavaScript和CSS资源添加64个行为和组件.这将大大减慢您的应用程序(并且您将遇到浏览器的限制 - 看着你,IE!)
归档时间: |
|
查看次数: |
752 次 |
最近记录: |