基于struts的web应用开发总结(二)


一:打开模态框时showModual()方法并没有提供打开的窗体的title的参数,title要写在打开的模态框的jsp页面的<head></head>的内。

  且要把<TITLE></TITLE>标签放在<HEAD></HEAD>中的最上边。

  分析:

  1 模式窗口比较特殊,所以对于title的位置比较敏感。

  2 title标签本来就应该放在<HEAD></HEAD>中的最上边, 只不过普通的

  窗口允许或者忽略了title没有放在最上面的错误

  二:在做开发时发现了一个问题,如下:

  Cannot find bean under name org.apache.struts.taglib.html.BEAN

  网络上找的资料如下:

  1。试图在Struts的form标记外使用form的子元素。在后面使用Struts的html标记等

  2。不经意使用的无主体的标记,如web 服务器解析时当作一个无主体的标记,随后使用的标记都被认为是在这个标记之外的

  3。还有就是在使用taglib引入HTML标记库时,你使用的prefix的值不是html

  4。property必须和所要提交的action对应的formbean中的某个属性相匹配(必须有一个formbean)

  5。要使用标签,外层必须使用标签,不能使用html的

  三.关于java引用jar的问题:

  1.多工程一起开发时,如果要引用另一个工程的类,可以把另一个工程打成jar包放在发布服务如jboss发布的目录下(如jboss-4.0.5.GA\server\default\lib)下,并在工程代码里引另一个另一个工程,这样,代码就不会报找不到类的错误了。

  2.同时,要注意如果不把工程打成jar包,也可以把工程发布的目录放在jboss发布的目录下,在工程里引入这个工程的jar包就可以了。

  3.当在本工程与jboss的lib目录有重复的jar包的情况下,运行应用程序就会报错,会的提示类找不到,所以,两个目录只能存在一个jar包。
四:在发送ajax请求时,如果是某个表单的数据量非常大,这时候如果用method:"get"的话,请求会发不到action端,也没有返回结果,这时候需要把method:"get"改为method:"post"就不会了。

  五:

  本来想在公共的一个工程里写一个jsp,这个jsp里有调用本工程的servlet里的代码,这时候想其它的工程都引用这个jsp,但是出现一个问题:其它工程里认不到这个公共工程里的jsp引入的类。目前,我的做法是每个工程都放置这个引入类。其实最好的办法应该是把这个公共的类生成jar,放在每个工程下,或放在服务器发布的目录下。这点与js不同,公共的js可以放在一个工程下,其它的工程去引用它就好了。

  六:

  要在jsp里当某些条件符合时显示与不显示,有三种方式:

  第一种:可以用struts里的logic标签,如:

  <logic:equal name="JSP_USER_CODE" value="12345">...</logic:equal>

  第二种:但是用logic时需要把变量放在request、session等预定变量内,如果不想这么做,而只想根据url传的参数来做为判断条件的话,可以用:

  jstl标签,如:

  url = "/dep_info_frame.jsp?modual=select_users";

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<c:if test="${param.modual=='select_users'}">...</c:if>

  第三种是用<%%>把条件的java代码写在jsp里。如:

<%

 if(..){

%>

<span>show if a</show>

<%}else{%>

<span>show if b</show>

<%}%>
七:

  在某个页面上如点击如个按钮open出另一个jsp页面,常常在打开的jsp里要去访问按钮所在的jsp的某些元素,这里有个概念很容易误码解,会用:self.parent,其实应该是self.opner。parent,child这些是用在多窗口,多框架里的,而打开另一个窗口,并不存在子父关系,这点需要明白。

  八:

  在jsp常需要用到清除缓存,这点很重要也很常,可以如下代码:

  Java代码  

<%  
  response.setHeader("Cache-Control", "no-store");  
  response.setHeader("Pragrma", "no-cache");  
  response.setDateHeader("Expires", 0);  
%> 

  九:

  对某个元素,当想点击时触发某个事件,且想在鼠标移过去做些样式的变化,可以不用自己写onmouseover,onmouseout来做样式的控制,可以直接用<a>,在<a>的href中也可以执行js,这点可能大家比较不清楚。如下:

  Js代码

<a href='javascript:phoneListJs.showTabbarContent("+serial_num+","+cmt+");' style='color:red;'>编辑</a>

  十:

  从数据库里取出来的字段数据,很经常的值是为空的null,这时候在程序里需要做下判断是否为null,不能就直接拿来处理。比如我在程序中不有判断就用了trim(),这就有异常了。如果想把null或空值转化为默认值,可以用如下方法:

  Java代码

 public static String replaceIfMissing(String orig,String replacement) throws Exception{ 
 String result = ""; 
 try{ 
  if((orig==null)||(orig.trim().equals(""))){ 
  result = replacement; 
  }else{ 
  result = orig; 
  } 
 }catch(Exception ex){ 
  ex.printStackTrace(); 
 } 
 return result; 
 }


  十一:

  写sql语句时,对于排序,如果某个字段为空,但是也要放在排序的某个位置上,可以用nvl()方法


« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3