Javascript (ApacheWicket)从js函数设置java属性
我是ApacheWicket上的新手,需要在Java属性上设置值。该值来自JS上的一个var,由特定GIS库()中的特定函数填充。此设置必须由某些组件行为触发 下面是一个简化的示例代码: Wicket网页:Javascript (ApacheWicket)从js函数设置java属性,javascript,java,wicket,leaflet.draw,wicket-1.6,Javascript,Java,Wicket,Leaflet.draw,Wicket 1.6,我是ApacheWicket上的新手,需要在Java属性上设置值。该值来自JS上的一个var,由特定GIS库()中的特定函数填充。此设置必须由某些组件行为触发 下面是一个简化的示例代码: Wicket网页: public class MapPage extends WebPage { private static final long serialVersionUID = 1L; private Integer coordinates; // getters and setters }
public class MapPage extends WebPage {
private static final long serialVersionUID = 1L;
private Integer coordinates;
// getters and setters
}
Wicket html:
<html xmlns:wicket="http://wicket.apache.org">
<head>
<!-- metas, scripts, and css imports -->
</head>
<body>
<script>
// component declarations
var coordinates = ''
map.on('draw:edited', function (e) {
e.layers.eachLayer(function(layer) {
coordinates = toWKT(layer);
// send coordinates to coordinates java attribute ??? how??
});
});
</script>
</body>
//组件声明
变量坐标=“”
关于('draw:edited',函数(e){
e、 层。每个层(函数(层){
坐标=toWKT(层);
//将坐标发送到坐标java属性???如何??
});
});
非常感谢 这是我的一个项目中的一段代码,我想在其中处理单击(HighCharts)图表的操作。它将数据传递给Wicket,然后Wicket更新另一个面板以显示与单击相关的详细信息 相关的javascript部分,其中interactionurl实际上是稍后行为生成的callbackScript:
interactionurl(JSON.stringify(myDataToPass));
行为:
this.add( this.interactionbehavior = new AbstractDefaultAjaxBehavior()
{
@Override
protected void respond( final AjaxRequestTarget target )
{
RequestCycle cycle = RequestCycle.get();
WebRequest webRequest = (WebRequest) cycle.getRequest();
String param1 = webRequest.getQueryParameters().getParameterValue( "mydict" ).toString( "" );
//param1 contains the JSON map passed from javascript.
//you can also do stuff now, like replacing components using ajax
}
@Override
protected void updateAjaxAttributes( AjaxRequestAttributes attributes )
{
super.updateAjaxAttributes( attributes );
attributes.getExtraParameters().put( "mydict", "__PLACEHOLDER__" );
}
@Override
public CharSequence getCallbackScript()
{
String script = super.getCallbackScript().toString().replace( "\"__PLACEHOLDER__\"", "data" );
return script;
}
} );
@Override
public void renderHead( final IHeaderResponse response )
{
...
//use the `setupCallback` to store the callback script somewhere.., I store it in 'interactionurl'
String script = String.format( " setupCallback(this.interactionbehavior.getCallbackScript()); ");
response.render( OnDomReadyHeaderItem.forScript( script )
}
您只需要在某个时刻将交互url传递到页面。为此,您可以在具有以下行为的组件中使用renderHead
:
this.add( this.interactionbehavior = new AbstractDefaultAjaxBehavior()
{
@Override
protected void respond( final AjaxRequestTarget target )
{
RequestCycle cycle = RequestCycle.get();
WebRequest webRequest = (WebRequest) cycle.getRequest();
String param1 = webRequest.getQueryParameters().getParameterValue( "mydict" ).toString( "" );
//param1 contains the JSON map passed from javascript.
//you can also do stuff now, like replacing components using ajax
}
@Override
protected void updateAjaxAttributes( AjaxRequestAttributes attributes )
{
super.updateAjaxAttributes( attributes );
attributes.getExtraParameters().put( "mydict", "__PLACEHOLDER__" );
}
@Override
public CharSequence getCallbackScript()
{
String script = super.getCallbackScript().toString().replace( "\"__PLACEHOLDER__\"", "data" );
return script;
}
} );
@Override
public void renderHead( final IHeaderResponse response )
{
...
//use the `setupCallback` to store the callback script somewhere.., I store it in 'interactionurl'
String script = String.format( " setupCallback(this.interactionbehavior.getCallbackScript()); ");
response.render( OnDomReadyHeaderItem.forScript( script )
}
基本上你想从javascript调用wicket:谢谢,@RobertNiestroj。这一提法非常有用。还有一个问题:当Wicket.Ajax.get运行时,整个页面被重新加载,我错过了组件状态。wicket renderHead方法响应页面,但我不需要这个。设置属性值是我所要做的全部。知道如何避免重新加载所有页面吗?再次感谢。。。