Geoserver Web界面开发

2012 暑假

山西农业大学 

左脑

找了很长时间,都没有合适的资料,还是看官方的开发文档吧。今天针对WEB 用户界面这部分做了一下全文翻译:

Geoserver   Web用户界面开发

概述:
Geoserver 用Wicket框架来实现用户界面部分。Wicket不同于大多数其他JAVA web 框架,它是基于JSP模版实现的。使用Wicket框架,使程序员就像使用Swing编程一样。
Wicket插件:
由于Wicket是基于组件式的,所以可以从classpath载入,这就意味着Web应用程序可以进行模块化开发,而不是单一模式。
Geoserver的这一理念,提供了一个可以自由组合的用户界面,可以通过spring插件机制和常规的插入方式定制Web界面。
每个插入的组件都是通过组件描述符描述的。
组件的描述符是org.geoserver.web.ComponentInfo 类的实例。

public abstract class ComponentInfo<C extends Component> implements Serializable {

    /**
     * the id of the component
     */
    String id;
    /**
     * the title of the component
     */
    String title;
    /**
     * The description of the component
     */
    String description;
    /**
     * the class of the component
     */
    Class<C> componentClass;
   
}

一个组件的描述包含了标题、描述,以及实现该组件的一些信息。
组件的每一个子类都是一个特定的扩展点。例如 class org.geoserver.web.MenuPageInfo 类的实例,就是主页面的扩展点,也就是说从应用程序的主菜单链接到的页面。
实现一个Wicket UI 扩展:
本节当中,介绍实现Geoserver的Wicket用户界面扩展。这个扩展很简单,将做一个菜单项,连接到一个简单的网页,并显示“Hello World”。

需要准备的:
首先要将Geoserver的源码构建到eclipse中。不会的看前面的内容。
创建一个新模块:
1、建立一个名为hello_web 的模块。
2、在心添加的模块根目录下添加一个pom.xml 文件,内容如下:
<project xmlns=”http://maven.apache.org/POM/4.0.0
   xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance
   xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd “>
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.geoserver</groupId>
    <artifactId>web</artifactId>
    <version>2.2-SNAPSHOT</version>
  </parent>

  <groupId>org.geoserver</groupId>
  <artifactId>hello_web</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>hello_web</name>

  <dependencies>
    <dependency>
      <groupId>org.geoserver.web</groupId>
      <artifactId>web-core</artifactId>
      <version>2.2-SNAPSHOT</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.5</source>
          <target>1.5</target>
        </configuration>
     </plugin>
   </plugins>
  </build>

</project>
3、在新添加的模块根目下建立如下目录结构:src/main/java

创建页面类:
1、org.geoserver.web.GeoServerBasePage 类,在Geoserver中是所有页面类的基类。在org.geoserver包下,创建一个新类,名为 HelloPage,继承至org.geoserver.web.GeoServerBasePage类。
package org.geoserver.helloweb;

import org.geoserver.web.GeoServerBasePage;

public class HelloPage extends GeoServerBasePage {

}
2、首先要实现父类的构造方法, 在Wicket页面或组件建立在它的构造本身,这个类中简单而且基础的添加了一个标签,它的值为“Hello World”。
import org.apache.wicket.markup.html.basic.Label;

   public HelloPage() {
       add( new Label( “hellolabel”, “Hello World!”) );
   }
上面的代码中,创建了而一个label实例,第一个参数是该label的ID值,在Wicket中每一个组件必须有一个ID值,在下一节中,这个ID值将绑定到HTML表现层中,第二个参数是label上显示的字符。
建立一个演示页面:
1、上面的页面类完成后,需要创建一个HTML页面,用来演示结果。需要建立一个和页面类同名同位置的HTML文件,如以上的页面类为HelloPage.java,那么需要在同一目录下创建一个HelloPage.html文件,内容如下:
<html>
  <body>
     <wicket:extend>
        <div wicket:id=”hellolabel”></div>
     </wicket:extend>
  </body>
</html>
关于HTML文件需要注意以下几点:
1、首先要使用<wicket:extend> 标签,这样写的目的是,让Wicket知道,HelloPage是另一个页面的扩展(对于本例是GeoServerBasePage页的扩展),HelloPage继承了GeoServerBasePage页
2、其次要注意在<div>标签中的wicket:id,这个值就是上节中创建的label组件绑定所对应的值,wicket:id必须与页面类的组件ID匹配。
创建国际化文件:
在程序的页面显示中,任何程序都应该国际化,在Geoserver中通过创建一个GeoServerApplication.properties文件,来实现国际化。
1、在模块的根目录下,创建如下目录结构src/main/resources。
2、创建 GeoServerApplication.properties文件在src/main/resources下。内容如下:
HelloPage.page.title=Hello
HelloPage.page.description=A page to say hello
HelloPage.title=Hello Page Title
HelloPage.description=This is the description of the page
以上前两个用来描述页面的标题和描述部分(定义部分不显示),后两个才显示。
建立关系(依赖)(上下文):
这是最后一个步骤,建立一个applicationContext.xml 在该模块下的src/main/java下,用来将我们建立的模块集成到Geoserver中。
<!DOCTYPE beans PUBLIC “-//SPRING//DTD BEAN//EN” “http://www.springframework.org/dtd/spring-beans.dtd“>

 <beans>
    <bean id=”helloPage” class=”org.geoserver.web.MenuPageInfo”>
      <property name=”id” value=”helloPage”/>
      <property name=”titleKey” value=”HelloPage.page.title”/>
      <property name=”descriptionKey” value=”HelloPage.page.description”/>
      <property name=”componentClass” value=”org.geoserver.helloweb.HelloPage”/>
    </bean>
</beans>
 上面代码说明,这是一个MenuPageInfo的实例,并连接到主页面上。titleKey是页面的描述,并且接受国际化文件中的定义,类似的还有其他值。
 测试我们的扩展:
 这时hello_web模块的机构应该下面这样的:
 hello_web/
   pom.xml
   src/main/resources
       GeoServerApplication.properties
   src/main/java
       applicationContext.xml
       org/geoserver/helloweb/
            HelloPage.java
            HelloPage.html
           
1、编译hello_web模块
  在该模块目下执行: mvn install
2、将生成的hello_web-1.0-SNAPSHOT.jar 文件从hello_web/target复制到WEB-inf/lib中。

 

转载自:https://blog.csdn.net/sxausgyy/article/details/7790723

You may also like...