lycong

2008年5月23日 #

使用SAX对XML根据具体需求过滤标签和长度截取

     摘要:        需要解决的问题是 根据一输入流读取一段XML内容,然后对其进行过滤截取,最后写回输出流中。具体说明如下: 1.对XML根据特定需求,过滤标签(如SCRIPT,FRAME等非标准HTML标签),过滤属性(如onclick,onblur等) 2.对XML进行长度截取,具体做法如下: (1)对start标签的处理: 若加上s...  阅读全文

posted @ 2008-09-01 21:26 cong 阅读(923) | 评论 (0)编辑 收藏

解决JSTL标签 循环 中途 break

如果直接使用<c:forEach> 直接在中间的代码中 插入break , 并不能退出循环。可以采用以下策略进行代换:
1. 用 <c:set var="collections" value="${forEach中的items}"/>
2. 用 jspContext.getAttribute("collections"); 获得对应的集合
3.最后就用最原始的for()。

posted @ 2008-07-14 14:19 cong 阅读(1817) | 评论 (1)编辑 收藏

将来2个月的学习计划

1.重温《Thinking in Java》的IO、容器、并发部分,泛型编程:大约用2周时间
2.重温《Core Java》的SWING ,大约用1周。
3.由于公司近期准备开发一套IM系统,要重点学习一下有关网络编程,特别是TCP/IP知识,socket编程:2周时间
5.学习《Ajax in Action》中Ajax高级应用部分。 1.5周
4.学习《Code Complete》有关测试部分,要学会编写测试用例:1.5周时间

posted @ 2008-07-10 20:33 cong 阅读(178) | 评论 (0)编辑 收藏

经常碰到的模块:修改密码 一 安全小技巧(服务器后台不返回密码)

        问题如下:当修改密码时,为了防止通过查看html源文件或其他方法看到用户的原始密码,一般服务器不会返回用户密码,可以利用javascript的技巧 ,在页面显示一虚假密码,然后判断密码是否修改过,如果真有修改过密码,才把密码送到后台服务器,否则不发送密码到后台服务器。
1. 页面显示代码:
<%--构造一个虚假的密码显示框--%>
                     
<fmt:message key="falsity_password_defaultValue" var="falsity_password_defaultValue" />
                     
<input id="falsity_password" type="password" name="falsity_password"
                             
default="${falsity_password_defaultValue}"
                             value
="${fn:escapeXml(param.falsity_password != null ? param.falsity_password : falsity_password_defaultValue)}" autocomplete="off">
                     
<input id="true_password" type="hidden" name="password"/>
其中 falsity_password_defaultValue 为服务器端事先设置好的虚假密码(可以在资源文件中设置), falsity_password 为页面显示的虚假密码,true_password 是当密码修改后,才发送到服务器, 下面就会对上面2个变量值作一些处理判断。

2. 对是否修改过密码进行处理。
A.当focus到密码框时,密码框清空, 到没有修改过密码就离开密码框时,就还原为虚假密码显示.
B.当修改过密码后,就会把true_password的值设置为修改后的值。
 <script type="text/javascript"><!--
  
function getTruePassword(){
    
<c:if test="${param.edit == 'modify'}">
      
var falsity_password = document.getElementById("falsity_password");
      
var true_password = document.getElementById("true_password");
           
if(falsity_password && true_password){
      
var defaultValue=falsity_password.getAttribute("default");

          
if(falsity_password.value != defaultValue) {
               true_password.value 
= falsity_password.value;
          }

      }

    
</c:if>
  }

  
<c:if test="${param.edit == 'modify'}">
  
var falsity_passwordNode = document.getElementById("falsity_password");
  
if(falsity_passwordNode) {
      Object.extend(falsity_passwordNode, 
{
          onfocus : 
function() {
              
if (this.value == this.getAttribute("default")) {
                  
this.value = '';
              }

          }
,
          onblur : 
function() {
              
if (this.value == '') {
                  
this.value = this.getAttribute("default");
              }

          }

      }
)

  }

  
</c:if>
  
//--></script>

判断falsity_password密码是否为虚假密码,若不是,则把true_password设置为修改过的密码。


3.服务器端要判断是否修改过密码,若修改过才把密码传到后台进行修改,这里主要看true_password是否为" ",若不为" ",则说明密码修改过。
这里可以通过tag来进行处理
<c:if test="${!empty param.true_password}">
/* 把true_password 传到后台进行修改    */
</c:if>


posted @ 2008-07-06 20:14 cong 阅读(556) | 评论 (0)编辑 收藏

Fix 问题: 进入编辑页面,当点击其他地方时,判断页面是否修改过,并提示相关信息。

     摘要:         问题如下:例如要修改某个人的信息时,进入编辑页面,当点击其他地方时,判断信息是否已被修改过,并提示相关信息。         本例中以个人通讯录信息为背景, 解决方法如下: 1.首先要有个 Object保存 一开始时从服...  阅读全文

posted @ 2008-06-16 21:50 cong 阅读(616) | 评论 (0)编辑 收藏

关于text文本框 按回车键 何种情况下 submit-------- 从一个bugfix 问题中想到

            接到一个问题,大概描述如下:页面有一text文本框,有一submit类型的按钮,输入内容后,按回车页面只是刷新一下,但是没有执行创建操作。而且文件夹名有如下限制:不能和之前创建文件夹同名,且非空。jsp中的内容简化为如下: 

<form> <tr>
 <td><input type="text" id="filename" /> </td>
<td><input type="submit" onclick="return addFile();"  id="sub"/> </td>
</tr> </form>


        其中addFile()函数会有上面提及到限制判断,并且会返回boolean类型,当然符合条件时就返回true,不符合就返回false。理所当然当输入内容后点击submit按钮会正常执行相关操作而且会正常执行限制判断。可是奇怪的是,在IE下 在text框输入内容后直接按回车确不能执行相关操作,只是页面刷新了一下, 但是在FIREFOX下 按回车却能正常执行操作和判断。 之前第一时间就是想到应该在text文本框中加一个onkeydown的事件enter_file(),enter_file函数是当按下回车时就执行,并且函数中应该有这句代码 document.getElementById('sub').click(); 就是说当回车时就执行submit按钮的click操作。 貌似应该会正常执行操作的吧,可是又一奇怪问题出现了,就是在IE下,在文本框中输入 a 后(假设之前没有文件名为a的文件),然后快速按2下(更多下也可以),结果会跳过“不能创建重复文件名”的判断,创建出2个相同名字a 的文件夹,而且例如输入同名文件名后,弹出框会一闪而过,不会等点击确认后才退出弹出框,但是在FIREFOX下却是正常执行,也不会出现一闪而过的现象,就是快速按几下也只是创建一个文件夹a。 之后百思不得其解,试过一些方法,比如把submit类型改为button类型,把onkeydown事件换成onkeypress或者onkeyup ,结果还是出现IE下快速按回车 创建2个同名文件夹,还是出现一闪而过的现象。
       初步判断可能是ie和ff在text框按回车的响应不同,最后上网搜了一下,找到一个帖子 名为求解一个关于回车的问题 http://topic.csdn.net/t/20061128/14/5191186.html ,具体内容到那个帖子看看。抽取其中值得注意的地方如下:
   IE:       
  1.   只有一个text框时,(不管有没有submit),直接触发onsubmit   (form标签的一事件属性)
  2.   有多个text框时,触发submit上的onclick,其默认行为为触发onsubmit。  

相对来说,ff的行为最复杂。       
  1.   有submit或button时,触发submit或button的onclick,然后该onclick的默认行为会触发onsubmit。  
  2.   没有submit或button时,  
  2.1   只有一个text框时,触发onsubmit;  
  2.2   有多个text框时,不触发onsubmit。  

因为看到当只有一个text框时,直接触发onsubmit,就联想到要在form标签中加上onsubmit事件,于是把上面的代码改为如下:
<form onsubmit="return addFile()"> <tr>
 <td><input type="text" id="filename" /> </td>
<td><input type="submit" id="sub"/> </td>
</tr> </form>
结果在IE下终于能成功操作,即是快速按几下也只是创建一个文件夹,并且不在出现一闪而过的现象。 因此很多时候在IE下可能出现奇怪问题,换作FF下就没问题了,Firefox支持JavaScript是正宗的。另外用firefox的插件 firedebug 来调试 javascript 程序 简直太爽了。




posted @ 2008-05-28 21:03 cong 阅读(1864) | 评论 (1)编辑 收藏

开发产品之个人感悟

          软件行业做项目和做产品有什么不同呢?最大的感受就是做产品始终是以客户(即使用者)为中心,不断做到精益求精。由于所在公司是开发邮件系统,也就是开发产品,之前自己负责的一些开发任务都是FIX系统的一些BUG或improvement,那些问题真得有些令我吃惊,每一步操作都必须考虑到用户的感受和使用方便程度,连每步TAB到哪个输入框都考虑到很精确,给我感觉就是客户端做得很庞大,也就是所谓的“胖客户端”,并且我暂时还没接触到的后台服务器的功能也是要做得尽善尽美。

posted @ 2008-05-23 21:56 cong 阅读(209) | 评论 (0)编辑 收藏

My Links

Blog Stats

常用链接

留言簿(1)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜