`
FansUnion
  • 浏览: 153385 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

2013年工作中遇到的20个问题:141-160

 
阅读更多

141.Tomcat启动时,提示没有找到某个类NoClassDefFoundError.
Eclipse源文件中,确实存在。

解决方案:选中Tomcat,右键-Clean,清除(Clean)Tomcat下的资源。

142.写js的时候,经常遇到兼容性问题。
今天在使用一个公司内部人士写的组件时,IE下又遇到问题了。
请他来帮忙解决,IE下调试快捷键是F12。有了提示,解决就方便多了。
IE不允许直接修改button的type属性。

143.Spring发邮件
Spring3.1.1 不需要配置spring-context-support

Spring3.2.3必须手动配置

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>3.2.3.RELEASE</version>
</dependency>

144.Mybatis中 #{name}表示字符串
$原样输出 order by

String in ="1,2,3";

select * from User where id in(${in})
--- select * from User where id in(1,2,3),即使是字符串,也不加引号
select * from User where name = #{name}
---select * from User where name = 'FansUnion'
select * from User where id = #{id}
---select * from User where id = 20

我的理解是:$一定是原样输出,而#会自动去判断,如果是字符串就加'',int就不加''。

145.内网与外网提交代码的技巧
公司内部SVN地址是:Ip形式的,192.168.1.126
外网SVN地址是:域名形式的,如miaozhen.com

在外网提交代码的技巧是,配置host,让miaozhen.com解析到,192.168.1.126。
这样,SVN提交代码的地址就不用切换了。

我是听1个同事说的,还没有尝试过哦。


146.做网站时,顶层菜单一般是一致的。
最开始学习时,使用的是<jsp:include page="header.jsp"/>
后来,使用了Sitemesh。

我的理解是在每一个页面,手动使用jsp:include导入菜单,
而Sitemesh是动态拦截每个需要的页面,导入菜单。

除了导入菜单,也可以在<head></head>中导入js、css等。

147.表名大小写
Windows下MySQL表名不区分大小写的。
Linux下MySQL表明是区分大小写的。

(根本原因应该是WIndows操作系统的文件名不区分大小写,Linux文件名区分。)

148.Tomcat部署的项目访问路径
项目名:FansUnion
Eclipse工程中的文件夹 Servers->Tomcat4FansUnion at localhost-config->Server.xml中有如下配置,
<Context docBase="CMS1.0" path="/FansUnion" reloadable="true" source="org.eclipse.jst.jee.server:FansUnion"/></Host>

访问路径为:http://localhost:8080/FansUnion

如果把path改为"/",则访问路径变为:http://localhost:8080/

(FansUnion项目部署在Webapps/FansUnion或类似的目录下,并非在webapps/ROOT目录下)


修改path的另外一种方式是:选中项目名-右键-Properties-Web Project Settings,修改Context Root的值,
“/”或者"/FansUnion"等。

(记得要手动清除已经部署的项目,以免出现问题。)


访问路径,不带项目名称的另外一种方式是,把项目部署到Tomcat-webapps-ROOT目录下。

149.导入css、js等经常遇到路径问题,找不到。
一种解决方案是 使用Spring等框架的标签,如
<script src="<s:url value='/js/tabColor.js'/>" type="text/javascript"> </script>

我觉得这种办法之所以有效,是因为使用了绝对路径,而非相对路径。

150.Maven工程,JUnit单元测试时的classpath问题。
Maven项目结构
src/main/java
src/main/resource

src/test/java
src/test/resouce

src/test/java 文件夹下的程序指定classpath,首先在src/test/java和src/test/resouce下寻找资源文件,
如果没有找到,再去src/main/java和src/main/resource下寻找资源文件。

而src/main/java下的程序指定classpath,只会去src/main/java和src/main/resource下寻找资源文件。

即main和test下的classpath,所包含的路径是不同的。

如果运行test下的单元测试程序,同时src/test/resouce和src/main/resource都有 配置文件,
同名的话,就会以src/main/resource 下的资源文件优先,存在覆盖问题。

151.jsp页面之间传递参数,也可以使用el表达式获得。
http://localhost:8080?age=24
${param.age}显示 24

152.Sitemesh

<decorators defaultdir="/decorators">
<!-- 不需要过滤的页面 -->
<excludes>
<pattern>/views/login.jsp</pattern>
<pattern>/views/addCampaign.jsp</pattern>

</excludes>

<decorator name="main" page="main.jsp">
<pattern>/*</pattern>
</decorator>

</decorators>

http://localhost:8080/views/addCampaign.jsp?id=1仍然会被Sitemesh过滤掉。

需要使用下面这样的配置,在末尾增加通配符*
<pattern>/views/addCampaign.jsp*</pattern>

153.今天需要给textarea限制字数,发现不能像text那样直接使用属性maxlength="4"。
只能单独写js了。


154.JQuery日历(DatePicker)等UI组件比较灵活。

日历组件可以设置,日期的格式、是否显示第几周,也可以支持汉化(需要引入中文js)。

155.今天在360doc上看到了1篇文章,想复制一个词语,结果提示不让复制。操蛋啊!


在网上找到了3个方法:http://hi.baidu.com/sxdbupt/item/49224412dfd932031894ece1

这里只记载1个最有价值的方法吧。

破解方法一:在需要复制的页面处,在地址栏输入如下代码
javascript:document.body.oncopy=null;void(0);

(根源:直接看 360doc的那些javascript,以为有什么高级的函数,费了近15分钟,最后绕回原点,
唉。原来还是直接使用了 document.body.oncopy,浪费了15分钟,三下五除二,搞定。)

156.jquery ui datepicker 插件如何设置只能选择日期?而禁止输入日期?
貌似没这种设置,直接给input框加readonly="readonly" 就行了。

参考资料:http://baike.1688.com/doc/view-d25607286.html

157.保存表单的时候,需要验证某个字段的重名。
$.post("<s:url value='/nameIsExist'/>", {
name : name
}, function(data) {//data(true or false)
if(data){
alert("The name exist.");
return false;
}else{
#ELSE
}
});
//下面是保存表单的代码
saveForm();

特别说明:上面的写法是不对的。

$.post是异步的,发送1个请求后,就开始执行saveForm了。无论名字是否存在,都会去保存表单。

应该在上面的 #ELSE 地方写 saveForm();

或者使用下面的方法,把ajax方法的参数async设为false。
($.post没有async这个参数)

/*
增加品牌不再验证是否重名
var exist = false;
$.ajax("isBrandExist", {
type:"post",
data:"brandName="+brandName,
async:false,
success:function(data) {
if (data) {
alert("品牌已存在!");
exist = true;
}
}

});

if(exist){
return false;
} */

总之,有2种方法。

158.Java和JavaScript等不同语言的语法和类库问题。

Java中的String有startWith("fans");
而JS中的String没有这个方法。charAt,substring等方法实现。

159.MySQL中的Replace into。
遇到1个功能,同步其它系统的用户列表,用户的id作为主键。
如果通过java代码来实现,应该是先删除所有的数据,再插入数据。
先删除的目的就是为了防止,出现重复的主键id。
(特别说明:同步过来的user,含有id,这个id作为主键)
另外一种方法是,使用MySQL中的Replace into。
replace into 跟 insert 功能类似,不同点在于:replace into 首先尝试插入数据到表中。
1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。
2. 否则,直接插入新数据。

要注意的是:插入数据的表必须有主键或者是唯一索引!否则的话,replace into 会直接插入数据,这将导致表中出现重复的数据。


参考资料:http://blog.csdn.net/sahusoft/article/details/4446877

160.Mybatis中的批量插入。
同步用户,量比较大。
如果是使用单条循环插入的话会对数据库造成很大的负荷状态,数据库的连接资源是有限的,循环插入的时候会直接的影响其它的数据库操作。

参考资料:http://hekuilove.iteye.com/blog/1470895

159和160参考代码

<insert id="addList" parameterType="java.util.List"
useGeneratedKeys="true" keyProperty="id">
insert into
Organization(id,nativeName,englishName,aliasName,orgTypeId,status)
values
<foreach collection="list" item="organization" index="index"
separator=",">
(#{organization.id},#{organization.nativeName},#{organization.englishName},#{organization.aliasName},#{organization.orgTypeId},#{organization.status})
</foreach>
</insert>

不能这样写(我为什么要这样写呢?我想的是insert into values(),()这种写法只能在mysql中用,不能跨数据库)
<insert id="addList" parameterType="java.util.List"
useGeneratedKeys="true" keyProperty="id">

<foreach collection="list" item="organization" index="index"
separator=" ">
insert into
Organization(id,nativeName,englishName,aliasName,orgTypeId,status)
values
(#{organization.id},#{organization.nativeName},#{organization.englishName},#{organization.aliasName},#{organization.orgTypeId},#{organization.status})
</foreach>
</insert>

相关阅读

工作问题 http://blog.csdn.net/FansUnion/article/category/1334371

原文参见http://fansunion.cn/articles/2241

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics