fossil

鸟在笼中,恨关羽不能张飞 人处世上,要八戒更须悟空
posts - 40, comments - 0, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

     摘要:   阅读全文

BeanSoft 2007-10-24 14:21 发表评论

文章来源:http://www.blogjava.net/beansoft/archive/2007/10/24/155586.html

posted @ 2007-10-24 14:21 J2EE UP UP 阅读(164) | 评论 (0)编辑 收藏

这个分页代码基于 JDBC 2.0 的滚动游标的机制, 核心观念就是利用 ResultSet 类里面的 boolean absolute( int row ) throws SQLException 方法进行数据的跳转.

经过测试(数据小于1万条, SQL Server 2000), 这个方法比用复合 SQL 语句查询分页的方案要快很多.

详细 JavaDoc 如下:

Moves the cursor to the given row number in this ResultSet object.

If the row number is positive, the cursor moves to the given row number with respect to the beginning of the result set. The first row is row 1, the second is row 2, and so on.

If the given row number is negative, the cursor moves to an absolute row position with respect to the end of the result set. For example, calling the method absolute(-1) positions the cursor on the last row; calling the method absolute(-2) moves the cursor to the next-to-last row, and so on.

An attempt to position the cursor beyond the first/last row in the result set leaves the cursor before the first row or after the last row.

Note: Calling absolute(1) is the same as calling first(). Calling absolute(-1) is the same as calling last().

Parameters:

row the number of the row to which the cursor should move. A positive number indicates the row number counting from the beginning of the result set; a negative number indicates the row number counting from the end of the result set

Returns:

true if the cursor is on the result set; false otherwise

Throws:

SQLException if a database access error occurs, or the result set type is TYPE_FORWARD_ONLY

@since

1.2

/*

* @(#)Pager.java 1.00 2004-8-12

*

* Copyright 2004 . All rights reserved.

* PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.

*/

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.Statement;

import java.util.Vector;

/**

* Pager, 基于 JDBC 2.0 滚动机制的分页程序, 在 MySQL, SQLServer, Access, Oracle 下测试通过.

* @author 刘长炯

* @version 1.0 2004-8-12

*/

public class Pager {

/** Used database connection */

Connection conn = null;

public Pager() {

}

/**

* 分页功能, 返回当页的数据(JDBC 2.0 实现).

* 

* @param currentPage

* 当前页面数(取值范围: 从 1 开始有效, 0 自动改为 1)

* @param pageCount

* 每页显示记录数

* 

* @return a Vector - 数据列表

*/

public Vector pageData(int currentPage, int pageCount) {

Vector results = new Vector();

String tableName = "table_name";// 要处理的表格名

ResultSet rs = null;

String sql = "SELECT * FROM " + tableName;

Statement stmt = null;

try {

// TODO: open connection

// 生成可滚动的结果集表达式

stmt = conn.createStatement(ResultSet.

TYPE_SCROLL_SENSITIVE,

ResultSet.CONCUR_READ_ONLY);

rs = stmt.executeQuery(sql);

int count = recordCount(); // 总记录数

int totalPage = (int) Math.ceil(1.0 * count / pageCount); // 总页面数

if (currentPage <= 0) {

currentPage = 1;

}

// 超出页码范围, 不返回数据

if (currentPage > totalPage) {

currentPage = totalPage;

return results;

}

if ((currentPage - 1) * pageCount > 0) {

// 移动结果集数据到当前页

rs.absolute((currentPage - 1) * pageCount);

}

// rs.absolute(0); 在 ODBC 下会导致如下异常:java.sql.SQLException: Cursor

// position (0) is invalid

int i = 0; // Readed pages

while (rs.next() && i < pageCount) {

i++;

// TODO: Read each row and process to value object

ValueObject bean = new ValueObject();

// TODO: Read value to value object

result.add(bean);

}

} catch (Exception exception) {

System.out.println("Occur a error in " + getClass()

+ ".pageData() : " + exception.getMessage());

// exception.printStackTrace();

} finally {

closeJDBCResource(stmt);

closeJDBCResource(rs);

closeJDBCResource(conn);

}

return results;

}

/**

* 返回当前数据库中记录的总数.

* 

* @return int 记录总数

*/

public int recordCount() {

int allCount = -1;

String tableName = "table_name";// 要处理的表格名

String sql = "SELECT COUNT(*) FROM " + tableName;

ResultSet rs = null;

Statement stmt = null;

try {

// TODO: open connection

stmt = conn.createStatement();

rs = stmt.executeQuery(sql);

if (rs.next()) {

allCount = rs.getInt(1);

}

} catch (Exception exception) {

System.out

.println("Occur a error in " + getClass()

+ ".recordCount() : " + exception.getMessage());

} finally {

closeJDBCResource(stmt);

closeJDBCResource(rs);

closeJDBCResource(conn);

}

return allCount;

}

/**

* Close a jdbc resource, such as ResultSet, Statement, Connection.... All

* these objects must have a method signature is void close().

* 

* @param resource -

* jdbc resouce to close

*/

public static void closeJDBCResource(Object resource) {

try {

Class clazz = resource.getClass();

java.lang.reflect.Method method = clazz.getMethod("close", null);

method.invoke(resource, null);

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* Test page.

* @param args

*/

public static void main(String[] args) {

// 分页, 读取第一页数据, 共读取5个记录

Vector data = new Pager().pageData(1, 5);

// TODO: process value object, 更改类名

for(int i = 0; results != null && i < data.size(); i++) {

ValueObject bean = (ValueObject)data.get(i);

}

}

}


BeanSoft 2007-10-23 16:00 发表评论

文章来源:http://www.blogjava.net/beansoft/archive/2007/10/23/155318.html

posted @ 2007-10-23 16:00 J2EE UP UP 阅读(203) | 评论 (0)编辑 收藏

2005 年的时候帮人收集整理修改的一份脚本级联菜单, 没用到 AJAX, 写死的数据. 效果自己试试就知道了. 支持主流浏览器. 自己现在看看这代码就觉得头大... 呵呵 脚本就是脚本啊. 一段时间放下就看不懂了.

 

三级关联菜单

 

<HTML>
<HEAD>
<TITLE>合同申请</TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<SCRIPT LANGUAGE = JavaScript>
/** Define object Dsy 构造器
fieldValues - 三个表单域的名称, 可以通过 request.getParameter(xxx) 取值
defalutOptions - 默认选项
*/
function Dsy(fieldValues, defalutOptions){
  this.Items = {};
  this.defalutOptions = defalutOptions;// 默认选项 
  this.fieldValues = fieldValues;// 三个表单域的名称
}

Dsy.prototype.add = function(id, iArray){
  this.Items[id] = iArray;
}

Dsy.prototype.Exists = function(id){
  if (typeof(this.Items[id]) == "undefined")
    return false;
  return true;
};

Dsy.prototype.setup = function() {
    this.bean_change(0);
}

// This prototype method added by BeanSoft Studio
Dsy.prototype.bean_change = function(v){
  var str = "0";
  for (i = 0; i < v; i++){
    str += ("_" + (document.getElementById(this.fieldValues[i]).selectedIndex - 1));
  };

  var ss = document.getElementById(this.fieldValues[v]);
  // Avoid a null exception
  if(ss == null) return;

    with(ss){
      length = 0;
      options[0] = new Option(this.defalutOptions[v], this.defalutOptions[v]);
      if (v && document.getElementById(this.fieldValues[v - 1]).selectedIndex > 0 || !v){
        if (this.Exists(str)){
          array = this.Items[str];
          for (i = 0; i < array.length; i++)
            options[length] = new Option(array[i], array[i]);
          if (v)
            options[1].selected = true;
        }
      }

      if (++v < s.length){
        this.bean_change(v);
      }
    }
}

  function change(v){   
    dsy.bean_change(v);// Call test prototype
  }

  // Write form data string, 输出表单脚本代码
  // dsy, object name
  // varName, 变量名
  function toString(dsy, varName) {
    var str = "";
    for(i = 0; i < dsy.fieldValues.length; i++) {
        str += "<select id=\"" + dsy.fieldValues[i] + "\" onChange=\"" + varName + ".bean_change(" + (i + 1)
            + ");\"></select>\r\n";
    }
    str += "<br/>";
    return str;
  }

// 第一个对象
  var dsy = new Dsy(["s1", "s2", "s3"], ["销售方名称", "销售方联系人", "联系电话"]);
  var dsy1 = new Dsy(["s4", "s5", "s6"],  ["最终用户名称", "最终用户联系人", "联系电话"]);
  var dsy2 = new Dsy(s = ["s7", "s8", "s9"], ["厂商", "厂商销售", "联系电话"]);

// 填入数据, 重复的代码
  dsy.add("0", ["亚信", "航天理想"]);

  dsy.add("0_0", ["亚信联系人_1", "亚信联系人_2"]);
  dsy.add("0_0_0", ["亚信联系人_1联系电话"]);
  dsy.add("0_0_1", ["亚信联系人_2联系电话"]);

  dsy.add("0_1", ["航天理想联系人_1", "航天理想联系人_2"]);
  dsy.add("0_1_0", ["航天理想联系人_1联系电话"]);
  dsy.add("0_1_1", ["航天理想联系人_2联系电话"]);

  dsy1.add("0", ["最终用户1", "最终用户2"]);

  dsy1.add("0_0", ["最终用户1_联系人1", "最终用户1_联系人2"]);
  dsy1.add("0_0_0", ["最终用户1_联系人1_电话"]);
  dsy1.add("0_0_1", ["最终用户1_联系人2_电话"]);

  dsy1.add("0_1", ["最终用户2_联系人1", "最终用户2_联系人2"]);
  dsy1.add("0_1_0", ["最终用户2_联系人1_电话"]);
  dsy1.add("0_1_1", ["最终用户2_联系人2_电话"]);

  dsy2.add("0", ["BEA", "Horizon"]);

  dsy2.add("0_0", ["张学友", "BeanSoft"]);
  dsy2.add("0_0_0", ["1234567890"]);
  dsy2.add("0_0_1", ["beansoft@126.com"]);

  dsy2.add("0_1", ["AAA", "BBB"]);
  dsy2.add("0_1_0", ["AAA_99999"]);
  dsy2.add("0_1_1", ["bbb_88888"]);

  function setup(){  // Initialize the object
    dsy.setup(); //依次调用 setup
    dsy1.setup();
    dsy2.setup();
  }

function prints1(){
    alert(document.frm.s1.value + " " + document.frm.s2.value + " " + document.frm.s3.value +"\r\n");
}

//isNaN()检查运算结果  http://tech.ccidnet.com/pub/article/c1115_a120997_p1.html

</SCRIPT>

</head>
<body bgcolor="#E0E0E0" onload="setup()">
多级关联菜单:
<form name="frm">

<!-- 方式1: 手工输出 HTML 代码, 便于排版
<select id="s1" onChange="dsy.bean_change(1);"></select>
<select id="s2" onChange="dsy.bean_change(2);"></select>
<select id="s3" onChange="dsy.bean_change(3);"></select>
<br>
<br>
<br>
<select id="s4" onChange="dsy1.bean_change(1);"></select>
<select id="s5" onChange="dsy1.bean_change(2);"></select>
<select id="s6" onChange="dsy1.bean_change(3);"></select>
<br>
<br>
<br>
<select id="s7" onChange="dsy2.bean_change(1);"></select>
<select id="s8" onChange="dsy2.bean_change(2);"></select>
<select id="s9" onChange="dsy2.bean_change(3);"></select>
-->
<SCRIPT LANGUAGE="JavaScript">
<!--
// 方式2: 脚本输出表单 HTML 代码, 代码和上面注释掉的类似
document.write(toString(dsy, "dsy"));
document.write(toString(dsy1, "dsy1"));
document.write(toString(dsy2, "dsy2"));
//-->
</SCRIPT>

<input type=button name=b1 value="监测" onclick="prints1()">

</form>

</body>
</html>



BeanSoft 2007-10-22 10:43 发表评论

文章来源:http://www.blogjava.net/beansoft/archive/2007/10/22/154898.html

posted @ 2007-10-22 10:43 J2EE UP UP 阅读(253) | 评论 (0)编辑 收藏

注: 昨天用 VMWare 试了试 Fedora Live, 下载地址: ftp://download.fedora.redhat.com/pub/fedora/linux/releases/7/Live/i386/ 里面的两个 ISO 随便下一个就行了, 还不错, 安装后登录选择语言, 竟然支持中文和中文输入法, 要知道现在想找个安装包为700MB 的 Linux 还能支持中文的还真不多啊. 不过感觉有点吃内存, 响应上不如 RedHat 快. 安装后占用了 2.54 G 的空间.

image

June 5th, 2007

Fedora 7 Live 安装手记

Category: Ubuntu, Author: Nicky, Popularity: 30%

fedora-logo.png
这次 Fedora 7 提供的 CD 镜像分为两大版本,Fedora 7 Live 和 Fedora 7 KDE Live,前者默认采用 GNOME 桌面环境,后者集成 KDE 环境,只有在 DVD 版中才同时提供 GNOME 和 KDE 这两个供选择。用过 Redhat Linux 的都知道,在安装的时候可以选择一个桌面环境,也可以同时选择它们,现在 Fedora 7 真有点 Ubuntu 和 Kubuntu 的意思。我下载的是 Fedora 7 Live i686 来尝试,整个安装过程分为两方面,安装和配置,共 16 大步骤,花了我 30 张截图,不过绝大多数设置默认就行,重点还是在分区上。

下面是安装全过程。

一、进入 Live 桌面

1、下载 Fedora 7 Live,设置为光盘启动后,选择第一个从光盘镜像启动。

2、直接回车进入

3、进入到 Live 桌面

这种 Live 安装方式,对桌面用户来说是最爽的。

二、进行安装

1、双击桌面 install to fedora 图标开始安装。

2、选择键盘布局。

3、问你是否初始化这个驱动器,选择 Yes,否则无法继续。

4、开始分区,选择 Create custom layout,自定义分区。

Linux 分区和文件系统的选择可以参考这篇文章

可惜不提供 ReiserFS 文件系统的选择。

分区结束,点击 Next。

如果提示 Low Memory,选择 Yes。

5、选择 GRUB 安装位置,点击 Next。

6、网络设备配置,可以让它默认,点击 Next。

7、选择时区,可以在下拉菜单中选择,建议直接在地图上点击。

8、设置超级用户 root 的口令。

9、安装配置结束,点击 Next 开始进行安装。

自动安装过程

10、安装结束,点击 Close 重新引导系统。

三、安装后的设置

1、重新引导,进入 GRUB 画面。

可以看到核心是 2.6.21,比 Ubuntu 7.04 稍高一点。

启动画面很漂亮。

2、开始进行设置,这里面大多数都可以默认,直接 Forward 就是。

3、直接 Forward。

4、选择在哪些服务上启用防火墙,可以都不选择。

5、直接 Forward。

6、设置时间。

7、发送硬件信息到服务器,选 Do not send profile,点击 Forward。

再说一次 No, do not send。

8、建立个人帐户信息

如果提示口令太弱,不管它,点击 Yes。

9、声卡设置,完成点击 Finish。

到这里 Fedora 7 Live 的安装才算彻底完成了,虽然很多步骤可以默认,直接点击下一步,但相比 Ubuntu 7 步加 15 分钟安装的过程,说不繁琐那是骗人的。

来自: http://www.osxcn.com/ubuntu/fedora-7-installation-notes.html



BeanSoft 2007-10-20 10:18 发表评论

文章来源:http://www.blogjava.net/beansoft/archive/2007/10/20/154442.html

posted @ 2007-10-20 10:18 J2EE UP UP 阅读(308) | 评论 (0)编辑 收藏

用户可在 NetBeans 中开发 JSR 295 (Beans Binding) 和 JSR 296 (Swing Application Framework) 的应用。本教程演示了这一过程。

 



BeanSoft 2007-10-19 13:09 发表评论

文章来源:http://www.blogjava.net/beansoft/archive/2007/10/19/154173.html

posted @ 2007-10-19 13:09 J2EE UP UP 阅读(1261) | 评论 (0)编辑 收藏

从网上找的版本呢, 有白边. 今天花时间改进了一下, 效果打开页面的时候你就应该看到了. 如果配合 AJAX 做基于网页版 Outlook 通知的话会有一点点用. 首先感谢最初的原作者(转载的太多了, 找不到了).

显示效果:

image
其实有人做的有更好的版本, 参考这里(也是仅支持IE的):
Web的桌面提醒(Popup) 效果演示: http://webuc.net/MyProject/Popup/popup.htm
下载: http://webuc.net/MyProject/Popup/popup.rar

blogjava_popup_outlook

< SCRIPT >
var oPopup;
try {
oPopup
= window.createPopup();
}
catch (e) {
window.status
= '弹出通知消息仅能用于 IE 下 ! ';
}

var popTop = 10 ;
var mytime;

function popmsg(msgstr){
if ( ! oPopup) {
 
return ;
}
oPopup.document.body.innerHTML
= msgstr;
popshow();
}

function popshow(){
// window.status=popTop;
if (popTop >   1720 ){
clearTimeout(mytime);
oPopup.hide();
return ;
}
else   if (popTop >= 1720   -   108   && popTop <=   1720 ){
  oPopup.show(screen.width
- 200 ,screen.height, 193 , 1720   - popTop);
}
else   if (popTop >= 1500   && popTop <   1720   -   108 ){
oPopup.show(screen.width
- 200 , screen.height -   220   + (popTop -   1500 ), 193 , 108 );
}
else   if (popTop <= 108 ){
oPopup.show(screen.width
- 200 , screen.height, 193 , popTop);
}
else   if (popTop <= 220 ){
oPopup.show(screen.width
- 200 , screen.height - popTop, 193 , 108 );
}
else {
 
// window.status=popTop + "  else";
  oPopup.show(screen.width - 200 , screen.height - 220 , 193 , 108 );
}

popTop
+=   10 ;
mytime
= setTimeout( " popshow(); " , 40 );
}

function hidePop() {
  clearTimeout(mytime);
  oPopup.hide();
}

popmsg(
" <div onclick='window.parent.hidePop()' title='点击隐藏' style='cursor:pointer; background-image: url(http://www.blogjava.net/images/blogjava_net/beansoft/18269/o_qqbg.gif); width:193; height:108; color:white; padding-top:1em; padding-left:5; font-size:11pt; color:white' ><center><b>BlogJava 系统消息<br><br>请留言或者捐款支持 BeanSoft 的 Java EE 学习视频, 谢谢 !!</b></center></div> " );

</ SCRIPT >

 

最后来一个支持页面内的跨浏览器的:

blogjava_popup_msn_in

完美仿MSN右下角弹出广告代码并可自动消失,附带关闭按钮.

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>先飞电脑技术网</title>
</head>
<Script language="JavaScript">
<!--
window.onload = getMsg;
window.onresize = resizeDiv;
window.onerror = function(){}
//短信提示使用(asilas添加)
var divTop,divLeft,divWidth,divHeight,docHeight,docWidth,objTimer,i = 0;
function getMsg()
{
    try{
    divTop = parseInt(document.getElementById("eMeng").style.top,10)
    divLeft = parseInt(document.getElementById("eMeng").style.left,10)
    divHeight = parseInt(document.getElementById("eMeng").offsetHeight,10)
    divWidth = parseInt(document.getElementById("eMeng").offsetWidth,10)
    docWidth = document.body.clientWidth;
    docHeight = document.body.clientHeight;
    document.getElementById("eMeng").style.top = parseInt(document.body.scrollTop,10) + docHeight + 10;//  divHeight
    document.getElementById("eMeng").style.left = parseInt(document.body.scrollLeft,10) + docWidth - divWidth
    document.getElementById("eMeng").style.visibility="visible"
    objTimer = window.setInterval("moveDiv()",10)
    }
    catch(e){}
}

function resizeDiv()
{
    i+=1
    if(i>300) closeDiv()    //客户想不用自动消失由用户来自己关闭所以屏蔽这句
    try{
    divHeight = parseInt(document.getElementById("eMeng").offsetHeight,10)
    divWidth = parseInt(document.getElementById("eMeng").offsetWidth,10)
    docWidth = document.body.clientWidth;
    docHeight = document.body.clientHeight;
    document.getElementById("eMeng").style.top = docHeight - divHeight + parseInt(document.body.scrollTop,10)
    document.getElementById("eMeng").style.left = docWidth - divWidth + parseInt(document.body.scrollLeft,10)
    }
    catch(e){}
}

function moveDiv()
{
    try
    {
    if(parseInt(document.getElementById("eMeng").style.top,10) <= (docHeight - divHeight + parseInt(document.body.scrollTop,10)))
    {
    window.clearInterval(objTimer)
    objTimer = window.setInterval("resizeDiv()",1)
    }
    divTop = parseInt(document.getElementById("eMeng").style.top,10)
    document.getElementById("eMeng").style.top = divTop - 1
    }
    catch(e){}
}
function closeDiv()
{
    document.getElementById('eMeng').style.visibility='hidden';
    if(objTimer) window.clearInterval(objTimer)
}
-->
</Script>

<!--温馨提示代码开始-->

<DIV id=eMeng style="BORDER-RIGHT: #455690 1px solid; BORDER-TOP: #a6b4cf 1px solid; Z-INDEX:99999; LEFT: 0px; VISIBILITY: hidden; BORDER-LEFT: #a6b4cf 1px solid; WIDTH: 180px; BORDER-BOTTOM: #455690 1px solid; POSITION: absolute; TOP: 0px; HEIGHT: 116px; BACKGROUND-COLOR: #c9d3f3">
    <TABLE style="BORDER-TOP: #ffffff 1px solid; BORDER-LEFT: #ffffff 1px solid" cellSpacing=0 cellPadding=0 width="100%" bgColor=#AFDCF3 border=0>
    <TBODY>
        <TR bgColor=#6699cc>
            <TD style="font-size: 12px; background-image: url('msgTopBg.gif'); color: #0f2c8c" width=30 height=24></TD>
            <TD style="font-weight: normal; font-size: 12px; background-image: url('msgTopBg.gif'); color: #ffffff; padding-left: 4px; padding-top: 4px" vAlign=center width="100%"> 网站温馨提示:</TD>
            <TD style="background-image: url('msgTopBg.gif'); padding-right: 2px; padding-top: 2px" vAlign=center align=right width=19><span title=关闭 style="CURSOR: hand;color:white;font-size:12px;font-weight:bold;margin-right:4px;" onclick=closeDiv() >×</span><!--<IMG title=关闭 style="CURSOR: hand" onclick=closeDiv() hspace=3 src="msgClose.jpg">--></TD>
        </TR>
        <TR>
            <TD style="background-image: url('http://pic.tianyaclub.com/images/windty_bg.jpg'); padding-right: 1px; padding-bottom: 1px" colSpan=3 height=90>
                <DIV style="BORDER-RIGHT: #b9c9ef 1px solid; PADDING-RIGHT: 13px; BORDER-TOP: #728eb8 1px solid; PADDING-LEFT: 13px; FONT-SIZE: 12px; PADDING-BOTTOM: 13px; BORDER-LEFT: #728eb8 1px solid; WIDTH: 100%; COLOR: #1f336b; PADDING-TOP: 18px; BORDER-BOTTOM: #b9c9ef 1px solid; HEIGHT: 100%">先飞电脑技术网全新改版,免费精品网络资源,你用了吗?<BR>
                <DIV align=center style="word-break:break-all"><!--<a href="http://pic.tianyaclub.com/default.asp?idWriter=0&Key=0" target="_blank">--><a href="http://www.xfbbs.com" target="_blank">
                <font color=#FF0000>进入网站浏览</font></a></DIV>

                </DIV>
            </TD>
        </TR>
    </TBODY>
    </TABLE>
</DIV>
<!--温馨提示代码结束-->
</html>



BeanSoft 2007-10-18 23:03 发表评论

文章来源:http://www.blogjava.net/beansoft/archive/2007/10/18/154020.html

posted @ 2007-10-18 23:03 J2EE UP UP 阅读(307) | 评论 (0)编辑 收藏

Struts 里面的 <html:text> 之类的表单域标签, 都有一个属性叫: property, 这个属性根据文档是可以嵌套的, 例如下面的 formBean 嵌套了一个属性 User:

public class User {
  private String username;
  
  public String getUsername() {
    return username;
  }
  
  public void setUsername(String username) {
    this.username = username;
  }
}

 

public class UserForm extends FormBean {
  private User user;
  
  public User getUser() {
    return user;
  }
  
  public void setUser(User user) {
    this.user = user;
  }
}

 

那么对应的 JSP 页面里的  Tag 可以写成:

<html:text property="user.username" />

但是如果这时候有人还想给生成的表单加入 JavaScript 验证的话, 必须用下面的写法才能通过:

<script> // 表单验证函数 function validateForm(form) { // this.user.username 会报错 alert( this['user.username'] ); if(this['user.username'] .value == "") { alert("用户名不能为空!"); return false; } return true; }
</script>

这是因为 Struts 标签最后产生的 HTML 如下所示:

 

<form onsubmit="return validateForm(this);">
<input name="user.username" />
</form>

 

直接引用 元素.user.username 肯定会出错的. 正确的方法参考上上面的代码段即可.



BeanSoft 2007-10-17 14:24 发表评论

文章来源:http://www.blogjava.net/beansoft/archive/2007/10/17/153565.html

posted @ 2007-10-17 14:24 J2EE UP UP 阅读(815) | 评论 (0)编辑 收藏

目前在 http://developers.sun.com.cn 已正式宣布发布Java SE 6 API 中文版。
大家也可以从以下网址下载:
* HTML 格式 ( http://download.java.net/jdk/jdk-api-localizations/jdk-api-zh-cn/publish/1.6.0/html/zh_CN/api/index.html  )
* zip 格式 ( http://download.java.net/jdk/jdk-api-localizations/jdk-api-zh-cn/publish/1.6.0/html_zh_CN.zip  )
* CHM 格式 ( http://download.java.net/jdk/jdk-api-localizations/jdk-api-zh-cn/publish/1.6.0/chm/JDK_API_1_6_zh_CN.CHM  )

http://gceclub.sun.com.cn/NASApp/sme/jive/thread.jsp?forum=35&thread=44422



BeanSoft 2007-10-14 11:01 发表评论

文章来源:http://www.blogjava.net/beansoft/archive/2007/10/14/152693.html

posted @ 2007-10-14 11:01 J2EE UP UP 阅读(404) | 评论 (0)编辑 收藏

这篇文章, 个人认为非常片面和误导, 至于后记, 更是垃圾.  至于怎么样, 大家自己看, 呵呵. 起码, 企业不是军队, 领导不是总统, 员工也不是军人, 社会的发展又不是战争.

 

在一切有关古巴的事物中,有一个人最让我忘不了。
          当美国战争爆发后,美国必须立即跟西班牙的反抗军首领取得联系。加西亚将军在古巴丛林的山里—没人知道确切的地点,所以无法写信或打电话给他。美国总统必须尽快地获得他的合作。
        怎么办呢?
       有人对总统说:“有一个叫罗文的人,有办法找到加西亚,也只有他才找得到。”
他们把罗文找来,交给他一封写给加西亚的信。关于那个“名叫罗文的人”,如何拿了信,把它装进一个油布制的袋里,封好,吊在胸口,划着一艘小船,四天之后的一个夜里在古巴上岸,消逝于丛林中,接着在三个星期之后,从古巴岛的那一边出来,已徒步走过一个危机四伏的国家,把那封信交给了加西亚—这些细节都不是我想说明的。我要强调的重点是:麦金利总统把一封写给加西亚的信交给了罗文;而罗文接过信之后,并没有问:“他在什么地方?”像他这种人,我们应该为他塑造不朽的雕像,放在每一所大学里。年轻人所需要的不是学习书本上的知识,也不是聆听他人种种的指导,而是要强调一种敬业精神,对于上级的托付,立即采取行动,全心全意去完成任务—“把信带给加西亚”。
加西亚将军已不在人间,但现在还有其他的加西亚。凡是需要众多人才的企业经营者,有时候都会因为一般人的被动——无法或不愿意专心去做一件事——而大吃一惊:懒懒散散,漠不关心,马马虎虎的做事态度,似乎已经变成常态;除非苦口婆心、威迫利诱地叫属下帮忙,或者除非奇迹出现——上帝派一名助手给他,没有人能把事情办成。
        不信的话,我们来做个试验:你此刻坐在办公室—周围有6名职员。其中一名叫来,对他说:“请帮我查一查百科全书,把哥立奇的生平做成一篇摘录。”
        那人职员会静静地说:“好的,先生”,然后说去执行吗?我敢说他绝不会。他反而会满脸狐疑地提出一个或数个下列的问题:
        他是谁呀?
        哪套百科全书?
        这是我的工作吗?
        你不是指俾斯麦吧?
        为什么不叫查理去做呢?
        他是过世的人吗?
        急不急?
        我是否把书拿来,由你自己来查?
        你为什么要查他?
        我敢以10比1的赌注跟你打赌,在你回答了他所提出的问题、解释了怎么样去查那资料,以及你为什么要查的理由之后,那个职员会走开,去找另一个职员帮他查哥立奇的资料,然后又回来对你说,根本查不到这个人。当然,我这个打赌可能会输,但根据或然率,我还是会赢的。真的,如果你是聪明人,你就不会对你的“助理”解释,你会满面笑容地说“算啦”,然后自己去查。这种被动的行为,这种道德的愚行,这种心灵的脆弱,这种姑息的作风—都在把这个社会带到三个和尚没水喝的危险境界。如果人们都不能为了自己而自动自发,你又怎么能期待他们为别人采取行动呢?
         你登广告征求一名速记员,而应征者中,十之八九不会拼也不会写——他们甚至不认为这些是必要条件。这种人能写出一封给加西亚的信吗?
        在一家大公司里,总经理对我说:“你看那个簿记员。”
       “我看到了,他怎样?”
       “他是个不错的会计,不过如果我派他到城里去办个小差事,他可能把任务完成,但也可能就在途中走进一家酒吧,而当他到了闹市区,可能根本忘了他的差事。”
          这种人你能派他送信给加西亚吗?
         近来我们听到,许多人为“那些为了廉价工资工作而又无出头之日的工人”,以及为“那些为求温饱而工作的无家可归人士”表示出同情,同时又把那些雇主骂得体无完肤。
         但从没有人提到,有些老板一直到年老,都无法使有些不求上进的懒虫做点正经的工作;也没有人提到,有些老板长久而耐心地想感动那些当他一转身就投机取巧的 “员工”。在每一个商店和工厂,都有一个持续的整顿过程。公司负责人经常地送走那些显然无法对公司有所贡献的“员工”,同时也吸引新的进来。不论业务怎么忙碌,这种整顿一直进行着。只有当景况不佳,就业机会不多,整顿才会出现较佳的成绩——那些不能胜任没有才能的人,都被摒弃在就业的大门之外。只有最能干的人,才会被留下来。为了自己的利益,使得每个老板只保留对那些最佳的职员——那些能够把信带给加西亚的人。
         我认识一个极为聪明的人,他没有自己创业的能力,而对别人来说也没有一丝一毫的价值,因为他老是疯狂地怀疑他的雇主在压榨他,或存心压迫他。他无法下命令,也不敢接受命令。如果你要他带封信给加西亚,他极可给回答说:“你自己带去吧!”
当然,我知道像他这种道德不健全的人更值得同情;但是,我们也不会同情那些努力去从事一项大事业的人,他们不会因为下班的铃声而放下工作。他们因为努力去使那些漠不关心、偷懒被动、没有良心的员工不至于离谱而日增白发。如果没有这份努力和心血,那些员工将挨饿和无家可归。
        我是否说得太严重了?也许是吧。不过,当整个世界变成贫民窟,我要为成功者说几句同情的话——在成功机会极小之下,他导引别人的力量,终于获得了成功;但他从成功中所得到的一片空虚,除了食物之外,就是一片空无。我曾经是为了三餐而替人工作的人,也曾经当过老板,我知道这两面的种种。贫穷是不好的;贫苦是不值得推介的;并非所有老板都是婪都、专横者,就像并非所有的人都是善良者。
         我钦佩的是那些不论老板是否在办公室都努力工作的人;我也敬佩那些能够把信交给加西亚的人;静静地把信拿去,不会提出任何愚笨问题,也不会存心随手把信丢进水沟里,而是不顾一切地把信送到;这种人永远不会被“解雇”,也永远不必为了要求加薪而罢工。文明,就是为了焦心地寻找这种人才的一段长远过程。这种人不论要求任何事物都会获得。他在每个城市、村庄、乡镇—每个办公室、公司、商店、工厂,都会受到欢迎。世界上急需这种人才,这种能够把信带给加西亚的人。

后记:
         这是一个很多人都知道的故事,讲述了一个可能改变一场战争结局或一个国家命运的敬业守责的人的故事,这让人在许多方面心生感慨。卡内基把它与企业经营联系起来,阅读这篇文章,最强的感觉就是:卡内基怎么知道那么多我们企业的事?不仅有经营者的心声,也有职员的感受。在充斥着懒懒散散、漠不关心、马马虎虎做事态度的表象下,能把信带给加西亚的人才弥足珍贵。
        那么,我们来看一下能把信带给加西亚的人具有什么样的特质:
  ——“把信带给加西亚”要有积极的态度,这个积极的态度会决定下一步的一切行动。国内一知名企业宣扬自己的工作理念是,“企业的每个员工不是螺丝钉而是发动机”,当然,发动机固然可以促进企业加大马力发展,但不合格的螺丝钉同样会影响到整个机器的运转,如果做不了强大的发动机,那就安心做好一颗螺丝钉吧,努力做实事,尽心尽力,是一颗称职的螺丝钉应有的本份,好高鹜远,眼高手低,能“把信带给加西亚”吗?   ——“把信带给加西亚”要有主动的行动,行动本身就含有可能遇到麻烦甚至危险的含义,积极的行动就是要主动解决这些问题和麻烦,而不是被动地等待,消极地推诿。一家企业的老板炒掉了他们企业惟一的一名研究生,研究生不依不挠询问被炒的原因,老板说,你找到的只是一份工作,而不是一项事业。勇于承担责任,积极付出努力,我的上司说过一句虽然粗糙但很有道理的话:企业怎样才能做好?就一条,你家里的事怎么做,你在公司就怎么做。
  ——“把信带给加西亚”要有极强的责任心,没有哪个人说自己没有责任心,但缺乏责任心几乎无处不体现,有些人整日抱怨,有些人投机取巧,有些人划地自封,有些人会找各种借口为自己开脱,这些都无法掩盖责任心的缺乏……
  如此看来,卡内基在文章中提到的“把信带给加西亚”的人是一个尽心尽力做好本职工作的人应当具备的素质,并不是什么高不可攀的要求,但为什么在社会中,不缺各类专业人才,不乏各种精英,却独独缺乏“能把信带给加西亚”的人?是制度的某种缺陷?文化的丑陋一面?还是个体的差异?似乎都不能完全解释。卡内基是实证主义,他由此及彼,得出的结论也让人信服。如果卡内基是个中国人,我们会和他讨论一下世界观的问题,那些不能“把信送给加西亚”的人一定是世界观出了毛病,是对生活的态度出了偏差,我们崇尚的是“世界上怕就怕‘认真’二字”、“认真对待生活的人,生活一定会认真对待你”,听起来似乎与企业经营相差较远,但做事与做人是一致的,对生活采取敷衍态度的人不是能“把信送给加西亚”的。
       如果你最近因为工作方面的事感到郁闷,比如你觉得老板对你不公、同事不好好和你配合、待遇太低要求加薪,或者因为自己的远大理想正面临新的选择,那么请抽出半个小时阅读这本《致加西亚的信》,它会帮你从另一个角度认识自己。
我也相信新空间公司里也有很多很好的“罗文”,但实际上大部分人都不能“主动准时地把信带给加西亚。”事实胜于雄辩:
          1.“请将个人当日计划传递至管理秘书处。”的通知上个星期就在白板了,到了今天仍然有很多人无动于衷,小徐只能在通知的后面加“!”号。
          2.3月21日到广州参观国际展览原定早上7:30起程,但最后是8:30才动身。还是像上次去中山春游一样,要打电话催,要到宿舍去拉,才能将部分人集合。
这样的小事都做不好,业务上的事情更不用说了。我们的工作好像接力跑,很多人在接到棒后还未跑到接力点就把棒扔掉了,甚至有些人接到棒后根本就没有跑。所以我们公司的管理层总要疲于奔命地为下属留下的手尾“擦屁股”。
          形成良好的的职业素质,不论你在哪一间公司工作,你都是最受欢迎的的!


BeanSoft 2007-10-14 10:26 发表评论

文章来源:http://www.blogjava.net/beansoft/archive/2007/10/14/152683.html

posted @ 2007-10-14 10:26 J2EE UP UP 阅读(137) | 评论 (0)编辑 收藏

<input type="button" onclick="ajaxTest()" value="AJAX测试">

<input type="button" onclick=" document.getElementById('weather').innerHTML='' " value="隐藏">

<script>
// 1. 初始化 请求 对象
// Mozilla/Firefox 下的
var xmlhttp = new XMLHttpRequest();
// IE 下的
//var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")
//alert(xmlhttp);

function ajaxTest() {
    // 指定要打开的页面
    xmlhttp.open("GET", "staticpage.html", true);// HTTP 请求的方式, URL, 是否异步
    // 指定页面打开完之后要进行的操作.
    xmlhttp.onreadystatechange = mychange;
    // 开始发起浏览请求, Mozilla 必须加 null
    xmlhttp.send(null);
}

// 这个函数就是每次状态改变要调用的函数
function mychange() {
    // 请求已完成
    if(xmlhttp.readyState == 4) {
        //alert(xmlhttp.readyState);
        alert(xmlhttp.responseText);
        // 更新对应的 HTML 元素里面显示的内容
    // 根据 ID 引用页面里面的元素 document.getElementById(元素名)
    document.getElementById('weather').innerHTML = xmlhttp.responseText;
    }
}
</script>

<div id="weather"></div>


BeanSoft 2007-10-12 13:19 发表评论

文章来源:http://www.blogjava.net/beansoft/archive/2007/10/12/152318.html

posted @ 2007-10-12 13:19 J2EE UP UP 阅读(118) | 评论 (0)编辑 收藏

仅列出标题
共4页: 上一页 1 2 3 4 下一页