gpt4 book ai didi

java - 如果 Wicket 链接到 CSS 样式表,为什么它会使页面有状态?

转载 作者:行者123 更新时间:2023-11-29 10:05:21 25 4
gpt4 key购买 nike

我有一些布局如下的 Wicket 页面:

(主页.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>

(主页.java)

public class HomePage extends AbstractWebPage {
public HomePage() {
// Nothing necessary (real application initialises some other links here.)
}
}

(抽象网页.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")));
}
}

当我在 /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"));
}

这不应使您的页面有状态。还有一个额外的好处,就是不必向标记中添加任何内容。

这也适用于组件和行为,使您能够在较低级别封装依赖项。 Wicket 将过滤重复项(假设您向资源引用添加了唯一键)。

不幸的是,它确实向您的头部部分添加了额外的链接,因此在添加 64 个行为和组件时要小心,它们具有自己的 JavaScript 和 CSS 资源。这会大大降低您的应用程序速度(并且您会遇到浏览器的限制——看看你,IE!)

关于java - 如果 Wicket 链接到 CSS 样式表,为什么它会使页面有状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9883490/

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