java - Geocortext IMF框架空引用异常

标签 java jsp

仍然遇到此问题。如果可以的话请帮忙。

所以我尝试使用 Geocortex IMF 框架修复一段代码。我在第 40 行收到一个错误,该错误基本上是拉出一个空异常。它是java和html的混合体。由于某种原因,我似乎无法找出为什么错误会拉出空值。即使我向变量加载数据,它仍然停在 rs = activeLayer.getRecordset();

这是他们填写并提交的地址表

<%@ page errorPage="imfError.jsp" %>
<% 

  /*
     Program: afoAddressForm.jsp

     Purpose: Displays a page to the user to input address values for a
              USAddress type of geocoding query.
     Usage:   </>
     History: 
   */

  String layerId = request.getParameter("layerid");
  String scale = request.getParameter("scale");
  if (layerId == null) {
    throw new Exception("Missing layerid parameter.");
  }
  if (scale == null) {
    throw new Exception("Missing scale parameter.");
  }

%>
<jsp:include page="/imfCopyright.jsp"/>
<html>
<head>
<title></title>
<meta http-equiv="Content-Style-Type" content="text/css">
<link href="../../../imfStyle.css" rel="stylesheet" type="text/css">
<script language="JavaScript" type="text/javascript">
  function doNothing() {
  }
  function submitForm() {
    var strStreetName = document.frm.streetName.value;
    if (strStreetName == "") {
      alert("Please enter street name."  );
        document.frm.streetNumber.focus();
    } else {
      document.frm.action = "afoAddress.jsp?streetName="+strStreetName;
      document.frm.submit();
    }
  }
</script>
</head>
<body bgcolor="#FFFFFF" alink="#ff0000" link="#ff0000" vlink="#ff0000">
<form name="frm" action="JavaScript:doNothing()" method="post">
<input type="hidden" name="layerid" value="<%= layerId %>">
<input type="hidden" name="scale" value="<%= scale %>">
<table width="95%" border="0" cellspacing="0" cellpadding="0">
<center>
<tr><td align="left" class="bb11">Zoom To Street<hr></td></tr>
<tr><td height="10"></td></tr>
<tr>
<td align="left" valign="top" class="bn8">
Enter the street name where you wish to centre the map. 
If matching streets are found, you will be shown a list
of matching street names for you to choose where to 
zoom the map to.

</td>
</tr>
<tr><td height="10"></td></tr>
<tr><td align="center" class="bb8">Street Name</td></tr>
<tr><td align="center" class="bb8"><input name="streetName" size="15" maxLength=40 value=""></td></tr>
<tr><td height="10"></td></tr>
<tr><td align="center" ><input name="btn" type="button" value="Submit" onclick="JavaScript:submitForm()"></td></tr>
<tr><td height="10"></td></tr>
</center>
</table>
</form>
</body>
</html>

这是地址表单提交的内容

<%@ page import="com.moximedia.aims.*" %>
<% 
  /*
     Program: imfGeocodeUSAddress.jsp
              An Internet Mapping Framework (IMF) system script
              Copyright 2002 Province of British Columbia - all rights reserved
     Purpose: Displays a page of positions matching the address
              input by the user for USAddress geocoding styles.
     History: 20020610 Cates: original coding
              20030724 Cates: send user selection to separate script for labelling.
              20040525 Cates: changed frame reference top to parent
              20050103 Cates: added type to stylesheet link.
  */

  String layerId = request.getParameter("layerid");
  String scale = request.getParameter("scale");
  String StreetName = request.getParameter("streetName");

  AimsMap map = (AimsMap) (session.getAttribute("map"));
  AimsFeatureLayer activeLayer = (AimsFeatureLayer) map.getLayers().getLayer(layerId);

  AimsRecordset rs = null;
  AimsFilter streetFilter = new AimsFilter();

  if (activeLayer != null && activeLayer.getFilter()!= null) {
    streetFilter = (AimsFilter) activeLayer.getFilter();
  }

  String query_String="";
  if (StreetName == null) {
     return;
  }else{
      StreetName = StreetName.toUpperCase();
      query_String = "upper(FENAME) = '" + StreetName +"'";
      //query_String = "FENAME like '%" + StreetName +"%'";
      streetFilter.setWhereExpression(query_String);
  }

  // do the query, and whatever we need to do with the data
  rs = activeLayer.getRecordset();
  rs.clear();
  rs.clearFilter();
  rs.setMaximumResults(100);
  rs.setBufferSize(rs.getMaximumResults());
  rs.setFilter(streetFilter);
  rs.query();

  int count = 0;
  rs.moveFirst();

  while(!rs.EOF()) {
      count++;
      rs.moveNext();
  }
%>
<jsp:include page="/imfCopyright.jsp"/>
<html>
<head>
<title></title>
<meta http-equiv="Content-Style-Type" content="text/css">
<link href="imfStyle.css" rel="stylesheet" type="text/css">
<script language="JavaScript" type="text/javascript">
    function submitForm() {
        document.query.submit();
    }
</script>
</head>
<body onload="submitForm();">
<form name="query" method="post" action="afoSelectDefaultFind.jsp">
<input type="hidden" name="layerid" value="<%= layerId%>" >
<input type="hidden" name="rec" value="1" >
<input type="hidden" name="total" value="<%=count%>" >
<input type="hidden" name="query_String" value="<%=query_String%>" >
</form>
</body>
</html>

错误是当您在表单上点击提交时,会弹出 java.lang.NullPointerException 错误并将其放在第 40 行,即 rs = activeLayer.getRecordset();。对此的任何帮助都会很棒。

最佳答案

嗯,我的猜测是 activeLayer 为 null,然后您在 null 对象引用上调用 getRecordset()。你可以尝试调试一下

map.getLayers().getLayer(layerId);

确保它返回一些东西?

关于java - Geocortext IMF框架空引用异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1364249/

相关文章:

java - 如何判断为特定 Artifact 指定快照版本的位置?

jsp - 在spring/mvc中,在jsp页面中的 "model"上使用if-then-else语句

java - JSTL 迭代列表

java - 无法从 GroovySystem 获取 Groovy 版本,尝试 InvokerHelper

java - 使用正则表达式匹配日期范围

java - 如何在不破坏原始数组的情况下对数组进行排序?

java - visualvm 在 mac 0S10.8 上挂起

java - 自动分配ID号

jsp - 以EL方式设置字符编码

java servlet在JSP中获取cookie值