编程相关

通过Java的static,理解JavaScript的prototype

日期:十二月 27th, 2011 分类:前端开发, 编程相关

先看两段代码:

Java 代码

public class Dog {
  public static final String type="golden retriever";

  public Dog(String name){
    System.out.println(name + " is a " + type + " dog.");
  }

  public static void main(String[] args){
    Dog dog = new Dog("tom_1");
    dog = new Dog("tom_2");
  }
}

JavaScript 代码

function Dog(name){
  alert(name+ " is a " + this.type +" dog");
}

Dog.prototype.type="golden retriever";

var dog = new Dog("tom_1");
dog = new Dog("tom_2");

共性:

1、都是在构造方法之前就已经初始化了;

2、所有实例对象共享同一个变量;

分享:jasperreport的il8n

日期:十二月 7th, 2011 分类:编程相关

在jasperreport jar包的\net\sf\jasperreports\view\下面有很对viewer_*.properties的文件,这些文件就是默认的il8n文件,但是没有中文的。

那么就把里面某个文件,拽出来,重命名文件名为:viewer_zh_CN.properties

对应的键值对,可以自行更改,然后再把这个中文i18n文件加入到jar包中即可。如下图所示:

Caused by: org.hibernate.hql.ast.QuerySyntaxException: unexpected end of subtree

日期:十二月 2nd, 2011 分类:编程相关

这是一个Hibernate bug,具体可以查看这里:https://hibernate.onjira.com/browse/HHH-2045,截止目前的状态还是Open。

通常是查询时 “in” 后面的集合为空时造成的。

比较简单的解决办法:

当集合为空时,给该空集合加入一个永远都不可能匹配上的值,让不为空。

还有另外一种稍简单办法就是拼接sql语句。

net.sf.jasperreports.engine.util.JRFontNotFoundException: Font ‘黑体’ is not available to the JVM

日期:十一月 29th, 2011 分类:编程相关

有些系统可能没有黑体,那么只能继续使用默认字体,当然也可以考虑把黑体的字体文件加入classpath中

下面说一下使用默认字体:

开发 jasperreports-4.1.2.jar包,找到:default.jasperreports.properties
在这里修改jasperreports的默认字体设置

# Font settings
net.sf.jasperreports.default.font.name=SansSerif
net.sf.jasperreports.default.font.size=10
net.sf.jasperreports.default.pdf.font.name=Helvetica
net.sf.jasperreports.default.pdf.encoding=Cp1252
net.sf.jasperreports.default.pdf.embedded=false
net.sf.jasperreports.awt.ignore.missing.font=false

其中

net.sf.jasperreports.awt.ignore.missing.font=true

是关键所在。

修改完再扔回包里,就可以了。

Querying @ElementCollections

日期:十一月 3rd, 2011 分类:编程相关

在JPA 2.0中使用到注解 @ElementCollection

public class Budget extends IdEntity {

@ElementCollection(fetch = FetchType.EAGER)
@Column(name = "projectLeaderIDs")
private List<String> projectLeaderIDs;
}

在@ElementCollection的属性中做查询

String sql = "select count(b) from " + Budget.class.getSimpleName()
                + " b,IN (b.projectLeaderIDs) s where :userID in s";

show sql:

Hibernate:
    select
        count(budget0_.id) as col_0_0_
    from
        budget budget0_
    inner join
        Budget_projectLeaderIDs projectlea1_
            on budget0_.id=projectlea1_.Budget_id
    where
        ? in (
            projectlea1_.projectLeaderIDs
        ) limit ?

在对List做remove操作时抛出java.lang.UnsupportedOperationException

日期:十月 27th, 2011 分类:编程相关

原因:
那个List是通过Arrays.asList()这个方法构造的,一直以为返回的就是一个ArrayList,今天查看了源码发现错了,是Arrays里面一个名叫ArrayList的私有类。

public class Arrays {
...
public static  List asList(T... a) {
	return new ArrayList(a);
}

private static class ArrayList extends AbstractList
	implements RandomAccess, java.io.Serializable
{
...
}
...
}

它也继承自AbstractList,只是没有实现remove方法,而AbstractList类中remove方法默认是抛java.lang.UnsupportedOperationException异常的。

public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> {
...
public E remove(int index) {
	throw new UnsupportedOperationException();
}
...
}

cannot simultaneously fetch multiple bags 问题的解决办法

日期:十月 24th, 2011 分类:编程相关

完整的异常信息如下:

org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags
	at org.hibernate.loader.BasicLoader.postInstantiate(BasicLoader.java:94)
	at org.hibernate.loader.entity.EntityLoader.<init>(EntityLoader.java:119)
	at org.hibernate.loader.entity.EntityLoader.<init>(EntityLoader.java:71)
	at org.hibernate.loader.entity.EntityLoader.<init>(EntityLoader.java:54)
	at org.hibernate.loader.entity.BatchingEntityLoader.createBatchingEntityLoader(BatchingEntityLoader.java:133)
	at org.hibernate.persister.entity.AbstractEntityPersister.createEntityLoader(AbstractEntityPersister.java:1914)
	at org.hibernate.persister.entity.AbstractEntityPersister.createEntityLoader(AbstractEntityPersister.java:1937)
	at org.hibernate.persister.entity.AbstractEntityPersister.createLoaders(AbstractEntityPersister.java:3205)
	at org.hibernate.persister.entity.AbstractEntityPersister.postInstantiate(AbstractEntityPersister.java:3191)
	at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:348)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1872)
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:906)
	at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:57)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63)

问题是什么时候出现的呢?

当一个实体对象中包含多于一个non-lazy获取策略时,比如@OneToMany,@ManyToMany或者@ElementCollection时,获取策略为(fetch = FetchType.EAGER)

在Swing中做更多web的事情

日期:九月 19th, 2011 分类:编程相关

在Swing客户端中有时候想加载网页,Flash,甚至需要一个很不错的富文本编辑器,这些需求Swing本身没有,或者很弱,比如富文本的支持。

接下来给你介绍一个第三方的Library – DJNativeSwing

支持什么呢?

  • web浏览器支持,HTML、Javascript和Swing交互支持
  • 常见的JS富文本编辑器,比如FCKeditor,Ckeditor,TinyMCE,Dirty indicator等
  • 嵌套Flash
  • 语法高亮
  • mediaPlay(Win32)
  • 其他…

DJNativeSwing

QuickNews for TouchPad

日期:九月 14th, 2011 分类:互联网产品, 编程相关

最近借了个TouchPad玩,但是说实在的中文应用严重缺乏啊,能玩的就是基于web浏览器的一些在线应用或者游戏,其他好玩的很少,再就是无法中文输入是个硬伤,在目前中文应用匮乏的情况下,在上面看新闻或许是个不错的事情,可惜App Catalog上面的新闻应用也基本上是国外的,国内的阅读类应用几乎没有。

于是就尝试着弄了这个QuickNews的新闻和RSS阅读应用,本来全是RSS的,后来无意找到了网易android版新闻客户端的新闻源,于是就挪了上来,也就是新闻部分的内容来自网易,其他RSS就是第三方找的。应用中的图片啥的也是从网上找的,都是免费版权的。

QuickNews For TouchPad 1

Notes:ajaxForm上传文件,返回json,回调不到success的处理建议

日期:八月 30th, 2011 分类:前端开发, 技术, 编程相关

把之前项目中头像上传的一个功能,改为ajaxForm回调success处理。

之前是先上传头像到服务器,然后再在另一个页面显示并通过jcrop剪辑,最终生成用户头像。

这个过程多了一步页面刷新,如果使用ajaxForm做异步文件提交,那么返回json数据直接处理,方便不少。

但是有一个问题那就是之前好多人遇到的问题,ajaxForm上传文件时,页面中的js无法回调success方法,导致出现下载框,昨天对这个问题深入做了测试,一般解决方式:

  1. 选对jquery版本和jform版本,并不是最新的版本都可以,推荐经测试肯定可以用的版本:jquery-1.5.1.min.js 和 jquery.form-2.67.js
  2. 如果出现下载框,可以尝试将服务器返回json的ContentType 改为text/html
  3. 使用struts-json插件的,可以如下设置:

    <result name="success" type="json">
        <param name="contentType">
               text/html
        </param>
    </result>
    

    直接在页面输出的,可以如下设置:

    HttpServletResponse response = ServletActionContext.getResponse();
    response.setContentType("text/html;charset=UTF-8");
    

无觅相关文章插件,快速提升流量