我正在使用Wicket,我已按照this指南(以及this一个)来构建网页模板。
我的目标是在<div>
内部有一个固定的页眉和页脚以及动态<body>
,当我通过点击某些菜单链接更改页面时,它会更改其内容。
所以最后我做了类似的事情:
HomePage.html
<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title wicket:id="title"> Title </title>
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
</head>
<body>
<div wicket:id="menu"></div>
<div wicket:id="homepageContent"></div>
<div id="content" wicket:id="template" class="">
<wicket:child/>
</div>
<script src="js/jquery-3.2.1.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="js/myjs.js"></script>
</body>
</html>
HomePage.java
public class HomePage extends WebPage {
// Title of the current page
private String pageTitle;
public HomePage() {
// dynamic page title
add(new Label("title", new PropertyModel<>(this, "pageTitle")));
// ...
}
// ...
public String getPageTitle() {
return pageTitle;
}
public final void setPageTitle(String title) {
pageTitle = title;
}
}
Menu.java
public class Menu extends Panel {
public Menu(String id) {
super(id);
add(new BookmarkablePageLink<>("homepageLink", HomePage.class));
add(new BookmarkablePageLink<>("page1Link", Page1.class));
add(new BookmarkablePageLink<>("page2Link", Page2.class));
}
public Menu(String id, IModel<?> model) {
super(id, model);
}
}
Page1.java
public class Page1 extends HomePage {
public Page1() {
setPageTitle("Page1");
// ...
}
}
Page2.java
public class Page2 extends HomePage {
public Page2() {
setPageTitle("Page2");
// ...
}
}
问题在于,每当我使用Menu
打开页面(Page1
或Page2
)时,浏览器会重新加载所有资源,我认为这是由于{{{ 1}}和Page1
是Page2
的孩子。
所以,例如,我遇到的一个问题是,如果我希望我的HomePage
通过javascript设置Menu
课程来跟踪我当前正在访问的网页,我会有麻烦,因为每次我访问页面时,active
文件(以及所有其他文件)都会再次下载,我放弃了我所做的所有逻辑。
我只想更改以下内容:
js
不刷新页面的其余部分。
是否可以通过更改Wicket方法来实现这一目标?
由于
答案 0 :(得分:2)
您想要做的基本上是单页应用程序。在这种情况下,页面继承不能很好地工作。当用户点击菜单项时,您需要将Page1,Page2等转换为面板并使用AJAX将它们作为页面内容(在您的代码窗口中:id =“template”)放置。
答案 1 :(得分:0)
您应该在父标记中使用<wicket:extend></wicket:extend>
。类似的东西:
<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title wicket:id="title"> Title </title>
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
</head>
<body>
<wicket:extend>
<div wicket:id="menu"></div>
<div wicket:id="homepageContent"></div>
<div id="content" wicket:id="template" class="">
<wicket:child/>
</div>
<script src="js/jquery-3.2.1.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="js/myjs.js"></script>
</wicket:extend>
<section id="content">
<wicket:child/>
</section>
</body>
</html>
在父标记内部使用 <wicket:child>
来定义子页面/面板可以“注入”其自定义标记的位置,从而扩展从父组件继承的标记。
现在只有子标记会更新,我不完全确定,但看起来只有子代码更新。