(Apache Wicket) 从 js 函数设置 java 属性

Posted

技术标签:

【中文标题】(Apache Wicket) 从 js 函数设置 java 属性【英文标题】:(Apache Wicket) Set java atrribute from a js function 【发布时间】:2018-06-17 11:21:53 【问题描述】:

我是 Apache Wicket 的新手,我需要在 Java 属性上设置值。该值来自 JS 上的 var,由特定 GIS 库 (https://leaflet.github.io/Leaflet.draw/docs/leaflet-draw-latest.html) 中的特定函数填充。此设置必须由某些组件行为触发。

这是一个简化的示例代码:

检票口网页:

public class MapPage extends WebPage 

private static final long serialVersionUID = 1L;
private Integer coordinates;

// getters and setters


检票口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>

非常感谢!

【问题讨论】:

基本上你想从javascript调用检票口:cwiki.apache.org/confluence/display/WICKET/… 谢谢你,@RobertNiestroj。该参考非常有用。还有一个问题:当 Wicket.Ajax.get 运行时,整个页面被重新加载,我错过了我的组件状态。 wicket renderHead 方法响应页面,但我不需要这个。设置属性值是我所要做的。关于如何避免重新加载所有页面的任何想法?再次感谢... 【参考方案1】:

这是我的一个项目中的一段代码,我想在其中处理对 (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;
        
     );

您只需要在某个时刻将交互 url 传递给页面。为此,您可以在具有以下行为的组件中使用 renderHead

    @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 ) 
    

【讨论】:

以上是关于(Apache Wicket) 从 js 函数设置 java 属性的主要内容,如果未能解决你的问题,请参考以下文章

Java:如何将值从javascript设置为wicket组件文本字段

Wicket中表单组件的国际化标签

嗨,我目前正在将 wicket 应用程序从 1.5.3 升级到 6.30.0,但是我收到错误并且登录页面没有被实例化

带有 Swagger UI 的 Apache Wicket REST

有没有办法在 Apache Wicket 中使用 HTML 模板创建表单组件

首个WICKET HELLOL World 报错Can not determine Markup. Component is not yet connected to a parent.