因为专注,所以专业

我的Java Blog

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  21 随笔 :: 30 文章 :: 6 评论 :: 0 Trackbacks

#

使用Ajax可以开发出基于浏览器的具有高用户交互性和几乎不易觉察到延迟的web应用。实时的动态数据比如新闻标题、证券报价和拍卖行情都需要尽快地发送给用户。然而,AJAX仍然受限于web请求/响应架构的弱点,使得服务器不能推送实时动态的web数据。

Delft科技大学的EnginBozdag、AliMesbah和ArievanDeursen一起讨论了下面这些可以实现基于web的实时事件通知的方法:

1.HTTP拉取方式:在这种传统的方法中,客户端以用户可定义的时间间隔去检查服务器上的最新数据。这种拉取方式的频率要足够高才能保证很高的数据精确度,但高频率可能会导致多余的检查,从而导致较高的网络流量。而另一方面,低频率则会导致错过更新的数据。理想地,拉取的时间间隔应该等于服务器状态改变的速度。

2.HTTP流:这种方法由存在于不间断的HTTP连接响应中或某个XMLHttpRequest连接中的服务器数据流所组成。

3.反转AJAX:服务流应用到AJAX,就是所谓的反转AJAX或者COMET。它使得服务器在某事件发生时可以发送消息给客户端,而不需要客户端显式的请求。目标在于达到状态变化的实时更新。COMET使用了HTTP/1.1中的持续连接的特性。通过HTTP/1.1,除非另作说明,服务器和浏览器之间的TCP连接会一直保持连接状态,直到其中一方发送了一条明显的“关闭连接”的消息,或者有超时以及网络错误发生。

4.长时间轮询:也就是所谓的异步轮询,这种方式是纯服务器端推送方式和客户端拉取方式的混合。它是基于BAYEUX协议的。这个协议遵循基于主题的发布——订阅机制。在订阅了某个频道后,客户端和服务器间的连接会保持打开状态,并保持一段事先定义好的时间。如果服务器端没有事件发生,而发生了超时,服务器端就会请求客户端进行异步重新连接。如果有事件发生,服务器端会发送数据到客户端,然后客户端重新连接。
posted @ 2009-04-25 13:13 kevin.zhan 阅读(202) | 评论 (0)编辑 收藏

获取一组radio被选中项的值
var item = $('input[@name=items][@checked]').val();
获取select被选中项的文本
var item = $("select[@name=items] option[@selected]").text();
select下拉框的第二个元素为当前选中值
$('#select_id')[0].selectedIndex = 1;
radio单选组的第二个元素为当前选中值
$('input[@name=items]').get(1).checked = true;

获取值:

文本框,文本区域:$("#txt").attr("value");
多选框checkbox:$("#checkbox_id").attr("value");
单选组radio:   $("input[@type=radio][@checked]").val();
下拉框select: $('#sel').val();

控制表单元素:
文本框,文本区域:$("#txt").attr("value",'');//清空内容
                 $("#txt").attr("value",'11');//填充内容

多选框checkbox: $("#chk1").attr("checked",'');//不打勾
                 $("#chk2").attr("checked",true);//打勾
                 if($("#chk1").attr('checked')==undefined) //判断是否已经打勾

单选组radio:    $("input[@type=radio]").attr("checked",'2');//设置value=2的项目为当前选中项
下拉框select:   $("#sel").attr("value",'-sel3');//设置value=-sel3的项目为当前选中项
                $("<option value='1'>1111</option><option value='2'>2222</option>").appendTo("#sel")//添加下拉框的option
                $("#sel").empty();//清空下拉框

posted @ 2009-04-22 11:38 kevin.zhan 阅读(804) | 评论 (0)编辑 收藏

1.安装apache的问题
2.安装PHP的问题

3.安装sugarcrm时的问题
  在安装向导的第三步,输入数据库的名字和密码时遇到ERROR 1251的错误。这是因为用户权限不足导致的,解决办法是:
mysql> SET PASSWORD FOR
-> 'some_user'@'some_host' = OLD_PASSWORD('newpwd');

mysql> FLUSH PRIVILEGES;

posted @ 2009-03-26 01:01 kevin.zhan 阅读(139) | 评论 (0)编辑 收藏

Code:
Ext.onReady(function() {
    
var data = [
        ['
001', '张三', 'zhangsan', '男', 24],
        ['
002', '李四', 'lisi', '男', 23],
        ['
003', '刘秀', 'liusiu', '女', 20]
    ];
    
var store = new Ext.data.SimpleStore ({
       fields: [
               {name: 'id'},
               {name: 'chineseName'},
               {name: 'englishName'},
               {name: 'sex'},
               {name: 'age', type: '
int'}
          ]
    });
    store.loadData(data);
    
    
var grid = new Ext.grid.GridPanel({
        store: store,
        columns: [
            {header: 'ID号', width: 
80, sortable: true, dataIndex: 'id'},
            {header: '中文名', width: 
100, sortable: true, dataIndex: 'chineseName'},
            {header: '英文名', width: 
100, sortable: true, dataIndex: 'englishName'},
            {header: '性别', width: 
100, sortable: true, dataIndex: 'sex'},
            {header: '年龄', width: 
100, sortable: true, dataIndex: 'age'}
        ],
        stripeRows: 
true,
        autoExpandColumn: 'id',
        height:
150,
        width:
480,
        title:'用户列表'
    });
    grid.render('div_grid');
    grid.getSelectionModel().selectFirstRow();
});

我在Ext.grid.GridPanel里加了autoExpandColumn属性,但是又没有设置id给它,如:
{header: 'ID号', width: 80, sortable: true, dataIndex: 'id'}
应该改成为:
{id: 'id', header: 'ID号', width: 80, sortable: true, dataIndex: 'id'},
这样就可以解决问题了。

posted @ 2008-11-18 23:12 kevin.zhan 阅读(115) | 评论 (0)编辑 收藏

<s:if test="citys.size() > 0">
    <s:select list="citys" name="cityId" listKey="id" listValue="name"></s:select>
</s:if>
可见,在struts的标签里可以直接使用request的变量。
其中citys是在Action定义的变量。

posted @ 2008-09-16 17:29 kevin.zhan 阅读(30) | 评论 (0)编辑 收藏

成功的前提:机遇+准备(例子:史泰龙遭遇1375次挫折。)

设定目标:
1.我要成为什么样的人?
2.我要得到什么?
3.我想要得到什么结果。

posted @ 2008-09-08 23:37 kevin.zhan 阅读(63) | 评论 (0)编辑 收藏

遇到一个不知道如何解决的问题。我写的一个发送邮件的程序,单元测试通过了,接收方能正常收到发送的邮件,可是我在页面调用的时候,接收方只是收到邮件,但是主题和正文都是空的。说明一下,我在服务方法那加了断点,查看到值已经传过去了,也设进Message了。下面是我的代码。
public void sendMail(String[] mailDetail) {
        username 
= email.split("@")[0];//email是成员变量,可以把它的值当作test@test.com
        properties 
= System.getProperties();
        String mailServerName 
= email.split("@")[1].split("\\.")[0];
        setGmailProperties();//暂时只是让它以gmail为服务器
        Session session 
= Session.getDefaultInstance(properties,
                
new Authenticator() {
                    
protected PasswordAuthentication getPasswordAuthentication() {
                        
return new PasswordAuthentication(username, password);
                    }
                });
        message 
= new MimeMessage(session);

        
try {
            message.setFrom(
new InternetAddress(email));
            message.setRecipient(Message.RecipientType.TO, 
new InternetAddress(
                    mailDetail[
0]));
            message.setSubject(mailDetail[
1]);
            message.setText(mailDetail[
2]);
            message.setSentDate(
new Date());

            Transport.send(message);//在这里我加了断点,查看了所有的变量都有值。
        } 
catch (AddressException e) {
            e.printStackTrace();
        } 
catch (MessagingException e) {
            e.printStackTrace();
        }
        System.out.println(
"邮件发送成功");
    }
    private void setGmailProperties() {
        properties.setProperty("mail.smtp.host", "smtp.gmail.com");
        properties.setProperty("mail.smtp.socketFactory.class",
                "javax.net.ssl.SSLSocketFactory");
        properties.setProperty("mail.smtp.socketFactory.fallback", "false");
        properties.setProperty("mail.smtp.port", "465");
        properties.setProperty("mail.smtp.socketFactory.port", "465");
        properties.setProperty("mail.smtp.auth", "true");
    }


posted @ 2008-07-11 10:50 kevin.zhan 阅读(357) | 评论 (0)编辑 收藏

 用过structs2 checkboxlist标签的同志一定知道,它默认的布局方式都是横排的.但是如果我们想要每n个checkbox后要换一行,这就有问题了.当然解决的办法是有的,只要改变checkboxblist.ftl就好了.像这样,你要让它每输出四个checkbox之后换行,那么你可以这样改:
 1 <#assign itemCount = 0/>
 2 <#if parameters.list?exists>
 3     <@s.iterator value="parameters.list">
 4         <#assign itemCount = itemCount + 1/>
 5         <#if parameters.listKey?exists>
 6             <#assign itemKey = stack.findValue(parameters.listKey)/>
 7         <#else>
 8             <#assign itemKey = stack.findValue('top')/>
 9         </#if>
10         <#if parameters.listValue?exists>
11             <#assign itemValue = stack.findString(parameters.listValue)/>
12         <#else>
13             <#assign itemValue = stack.findString('top')/>
14         </#if>
15 <#assign itemKeyStr=itemKey.toString() />
16 <#if itemCount%5 == 0>
17 <tr>
18 </#if>
19 <td>
20 <input type="checkbox" name="${parameters.name?html}" value="${itemKeyStr?html}" id="${parameters.name?html}-${itemCount}"<#rt/>
21         <#if tag.contains(parameters.nameValue, itemKey)>
22  checked="checked"<#rt/>
23         </#if>
24         <#if parameters.disabled?default(false)>
25  disabled="disabled"<#rt/>
26         </#if>
27         <#if parameters.title?exists>
28  title="${parameters.title?html}"<#rt/>
29         </#if>
30         <#include "/${parameters.templateDir}/simple/scripting-events.ftl" />
31         <#include "/${parameters.templateDir}/simple/common-attributes.ftl" />
32 />
33 <label for="${parameters.name?html}-${itemCount}" class="checkboxLabel">${itemValue?html}</label>
34 </td>
35 <#if itemCount%4 == 0>
36 </tr>
37 </#if>
38     </@s.iterator>

..小提示..checkboxlist会根据value属性而确定哪个checkbox被选中,但前提是listKey的类型和value的类型要一致.
比如说<s:checkboxlist listKey="id" listValue="desc" name="multiCheck" value="checkedIndex"/>
符合的组合:
id: long
checkedIndex: long[]

    id:String
    checkedIndex:String[]

posted @ 2008-06-11 15:43 kevin.zhan 阅读(1360) | 评论 (2)编辑 收藏

1.做文件上传时,出现Unable to load bean org.apache.struts2.dispatcher.multipart.MultiPartRequest .这时查看下你项目中是否存在commons-fileuploads.jar和commons-io.jar 包,要确定这两个包是在jakarta下载的,不能是从springframework解压过来的.当然也有可能其它包出现问题.不过只要确保包正确那就对了,这是原则.
2.出现Unable to determine the type for Columns.....().
这可能是创建表映射出现问题.创建持久化类的时候要确定表与表之间的关系,比如说.
1@Entity
2class A{
3      private String name;
4}
1
2@Entity
3class B{
4      private String id;
5      //需要在这里写表之间的关系
6      //@OneToMany
7      private A a;
8}

9
如果没加入表之间关系的话,就会出现第二个问题.
posted @ 2008-05-23 11:01 kevin.zhan 阅读(162) | 评论 (0)编辑 收藏

今天在一个博客上看到了许多常用的javascript脚本代码。在这里贴出来,跟大家参考参考。

http://www.cnblogs.com/duliang/

posted @ 2008-04-17 15:00 kevin.zhan 阅读(818) | 评论 (0)编辑 收藏

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