基于java的arcgis server开发(9)

2019-08-30 22:53

//Logic to remove a layer and all its descendants

private MapLayerInfo[] removeLayer(MapLayerInfo unwantedLayerInfo, MapLayerInfo[] oldLayerInfos) {

//新建一个MapLayerInfo

MapLayerInfo[] newLayerInfos = new MapLayerInfo[oldLayerInfos.length-1]; ArrayList descendantLayers = new ArrayList(); for(int i=0,j=0;i

if(oldLayerInfos.getLayerID()!=unwantedLayerInfo.getLayerID()) newLayerInfos[j++] = oldLayerInfos;

if(oldLayerInfos.getParentLayerID()==unwantedLayerInfo.getLayerID()) descendantLayers.add(oldLayerInfos); }

for(int i=0;i

newLayerInfos = removeLayer((MapLayerInfo)descendantLayers.get(i),newLayerInfos); }

return newLayerInfos; }

我们注意到这是一个递归函数,用于把该层下面所有的其它附属层都删除:

这个functionality写完了,我们来看看如何部署,部署的时候,先把它作为一个Managed Bean部署,用下面可代码即可,可以在faces-config.xml文件里面,也可以在ags-functionality.xml里面:

securitycheck

com.mypackage.SecurityCheckFunctionality none

将它作为一个managedBean部署后,下面就把它部署到resource中,注意部署的时候,要将其部署到map之后,toc之前,因为ADF初始化是按顺序初始化,我们的权限控制需要从Map中读出层的信息,然后修改MapDesc,从而影响TOC的信息,所以,进行如下的部署配置:

ags1

39

com.esri.adf.web.ags.data.AGSLocalMapResource

none ...

functionalities map

#{agsMap} query

#{agsQuery} tile

#{agsTile} overview

#{agsOverview}

pipeline_security_check #{securitycheck}

40

toc

#{agsToc}

OK,这个安全控制的functionality已经完成了。但是我们要对整个WebApplication加上安全控制,需要在web.xml做修改,添加如下的配置:

DIGEST

My_WebApplication //声明两个组用户

petroEmployee

stateEmployee

//声明什么资源将收到安全控制,这里我们把整个目录都控制,当然你也可以控制胆敢目录 *

petroEmployee stateEmployee

41

这两个组在什么地方定义呢?如果是Tomcat,我们可以在$TOMCAT_HOME/conf/tomcat-users.xml中定义,定义如下:

...

这样我们就控制了整个Web Application,并且对于不同的用户组,赋予了不同的层的查看权限。每次用户访问这个网站的时候,都会被提示要求输入用户名和密码,按照我们在Tomcat-users里面的定义进行输入即可。

还有用户会问道,如果我希望对属性字段的编辑进行控制怎么办;事实上原理是类似的,你让用户修改属性字段时,肯定要传输一个字段列表,你可以根据不同的用户组,对这个字段列表进行控制。

另外,这里我们用了WEB容器的用户和权限进行控制,事实上你不必依赖于Web容器,你可以在数据库中存放你自己定义的用户名和组,进行控制。

权限控制简单的讲就是这样子,.net里面也类似,有机会的话,我会写一个.net版本的给大家看看。

注:本讲座内容参考了并翻译了ESRI的JAVA帮助的部分内容。

17、Server Java讲座-----扩展Tasks框架

Tasks框架是一个很有意思的东西。如果你对Tasks框架还没有概念,你可以参考一下web map application那个Sample,左边浮动的放大工具,查询工具都是用Tasks框架构成。有人会问,既然已经有了command和tools,为什么还需要tasks呢?事实上tasks的目的是不同的;我们可以看一下web map application,可以看到,相同类型的button和toos组合在一起,组成一个逻辑单元,这就是tasks的选择条件。

我们来看看如何编写Tasks,编写Tasks是非常有意思的事情。Tasks跟tools一样,也是一个普通的Java类即可,这个Java类可以从Object直接继承。请看下面的Task的例子:

1public class JSTasks { public void doSomething(){

System.out.println(\ }

42

2345

6}

这个tasks实在是简单吧,看看怎么部署上去,我们在xml文件中做如下定义:

1

jsTask

com.cj.ucdemo.JSTasks session

2345

这个配置文件也非常简单,那么看来所有的诀窍在与如何在JSP页面里面使用它。我们来看看:

1

添加一个task标签,把这个标签的mapId值指向地图控件”Map0”,讲它的值指向我们刚才定义的Managed Bean。访问一下,大家看看下面的浮动窗口结果:

是不是很令人惊奇啊?事实上我们这个Bean中只有一个方法,但是Tasks框架聪明地把这个方法名给提取出来,作为button的名字。你点击一下这个按钮,在后台就可以看到执行了这个方法,打印出了一条信息。简单的说:方法就是按钮!!

有了上个Task的基础, 我们来看其它的Task就驾轻就熟了。事实上,整个Task就是一个类,Task的Caption就是这个类的类名。里面的每一个Public方法都是Task浮动条上的一个按钮。那么参数怎么办呢?我们来加一个参数,并且加上一个它的get方法和set方法:

1String parameter;

public String getParameter() { return parameter; }

public void setParameter(String parameter) { this.parameter = parameter; }

234567

43


基于java的arcgis server开发(9).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:混凝土收缩徐变预测

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: