在我的项目中,我遇到了从类中调用javascript代码的问题 wicket中的html。假设我们有一个类ExamplePanel,其代码为wicket panel
public final class ExamplePanel extends Panel {
public ExamplePanel(String id) {
super(id);
add(new Label("someText", "hello"));
}}
和html文件' ExamplePanel'
<html xmlns:wicket>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>ExamplePanel</title>
<wicket:head>
<link href="panel.css" rel="stylesheet"/>
<script src="jquery.min.js"></script>
<script src="jquery-ui.min.js"></script>
</wicket:head>
</head>
<body>
<wicket:panel>
<div id="parentContainer">
<div id="box" wicket:id="someText"></div>
</div>
</wicket:panel>
</body>
</html>
并跟随css
#box{
background: #f0f0f0;
width: 50px;
height: 50px;
position: absolute;
top: 200px;
left: 200px;
font-size: 1.5em;
word-wrap: break-word;
}
#parentContainer{
width:500px;
height: 500px;
background:RGB(57,51,51);
position:relative;
}
从这段代码我们在parentContainer div中有一个框,我需要在初始化ExamplePanel类时将位置坐标传递给框, 例如:
public ExamplePanel(String id) {
super(id);
add(new Label("someText", "hello"));
// add some code for css positioning of box div
// $('#div').css({position:'relative',top:'5px',left='29px'}) for example
}
有什么建议吗?
答案 0 :(得分:7)
ExamplePanel必须实现 IHeaderContributor ,它提供方法 renderHead(IHeaderResponse)。从这个方法中,你可以调用response.renderString()传递你想要应用的样式。在您的情况下,您没有添加样式,您正在添加一个添加一些样式的JS调用。这样做会使java调用变得更加简单,因为您不需要创建作为渲染字符串的一部分,而只需要调用response.renderJavascript()......
public class ExamplePanel implements IHeaderContributor {
public ExamplePanel(String id) {
super(id);
add(new Label("someText", "hello"));
}
@Override
public void renderHead(IHeaderResponse response) {
// use this if you want to add only the styles
response.renderString("<style>#div {position:'relative'; top:'5px'; left='29px';}</style>");
// or, use this if you still want the JS selector
// the uniqueId should not be null if you want Wicket to check if the script has already been rendered
response.renderJavascript("$('#div').css({position:'relative',top:'5px',left='29px'})", null);
}
}
IHeaderContributor接口旨在促进添加JavaScript和CSS等资源。
答案 1 :(得分:1)
您可以使用SimpleAttributeModifier或AttributeAppender在wicket中设置css值或类。可以找到有关如何操作的说明here。