5.9 关于js 的json问题
首先是两个概念:json字符串=’{“xx”:xx,”xx”:xx}’
json 对象={“xxx”:xx,”xx”:xx}
1:两者是如何转化的:(需要添加json.js)
Json字符串-》json对象:JSON.parse(jsonStr);jsonStr.parse();eval(‘(‘+jsonStr+’)’)
Json对象-》json字符串:jsonObj.toJSONString();JSON.stringify(jsonObj);
2:
VarjsonObj = {“persons”:[{“name”:”xx”,”sex”:man}]}
数组最后添加一条记录:
Var person = {“name”:”yaoming”,”sex”:man}
jsonObj.persons.push(person);//添加一条记录
jsonObj.persons.pop();//删除最后一条记录
5.9:关于innerHtml,outerHtml,innerText 的区别
1:innerHtml: innerHTML是用来获取元素内的html内容和文本.
2:outerHtml: outerHTML可以用来更改或获取元素内所有的html和文本内容,包含引用该方法元素自身的卷标.
3:innerText:获得标签内的文本;
5.9:下面一段代码是关于window.parent和window.opener区别 来讲的,我们如果要用到iframe的值传到另一框架就要用到window.opener.document.getElementById(name).value= uvalue;这种形式哦。
window.parent能获取一个框架的父窗口或父框架。顶层窗口的parent引用的是它本身。
可以用这一点特性来判断这个窗口是否是顶层窗口
5.9:/jquery.selectseach.min.js:智能select文本搜索插件;
注意select 需要添加:m=”search”
$(document).ready(function(){
$(‘#selectId’).selectseach();
})
5.9: functiongetOffsetTop (el, p) {
var _t = el.offsetTop; //将该连接对象的相对父容器的TOP偏移量赋给_t
while (el = el.offsetParent) { //这里的这句表达式,要完成的功能是判断el的父容器是否存在,如果是null的话,那么el在这里面就会被执行成false;
if (el == p) break; //这里就是一般的对比了,判断el和P是不是一样的,如果是一样的调处while
_t += el.offsetTop; //对_t累加,得到一个_t
}
return _t;
}
5.9:关于如何设计一个联想控件:
1:首先把所有记录取出来:以json的形式;
初始化json的sname属性(根据json的某个属性对应而来)
比如:设置一个拼音对应汉字的集合-》产生一个汉字对应的开始大写字母(徐超—>XC)
2:当在输入框输入值时候(obj.onfocus = xxxfunction())
3:关于xxxfunction();根据输入的字符(已经根据拼音对应获得的首字大写)长度来截取json[i].sname.str(i,输入字符长度);
4:当符合要求的时候将json的对应属性放到下拉列表中(如下);
关于下拉显示框的设置:
1:确定位置:showObj.offsetTop = obj.offsetHight + getTop(obj);
showObj.offsetLeft = getLeft(obj);
getTop(obj){
var tops = 0;
el = obj;
while(el){
tops = tops + el.offsetTop;
el = el.offsetParent;
}
Return tops;
}
getLeft(obj){
var lefts = 0;
el = obj;
while(el){
lefts = lefts + el.offsetLeft;
el = el.offsetParent;
}
Return lefts;
}
@NamedQuery
在使用 JPA 持续性提供程序的应用程序中,可以使用实体管理器动态创建和执行查询,也可以预定义查询并在运行时按名称执行。
使用 @NamedQuery批注创建与 @Entity 或 @MappedSuperclass 关联的预定义查询,这些查询:
使用 JPA 查询语言(请参阅 JSR-000220 Enterprise JavaBeans v3.0 规范,第 4 章)进行基于任何基础数据库的可移植执行
经常被使用
比较复杂并且难于创建
可以在不同实体之间共享
只返回实体(从不返回标量值),并只返回一个类型的实体
如果有多个要定义的 @NamedQuery,则必须使用 @NamedQueries。
Eg:
@NamedQueries(
{
@NamedQuery(name= “entity.name”, query = “select a from SsGoodsMskuEntity a where a.msk = ? ”),
……………………………..
}
)
@NamedQuery 预定义的sql的使用;
AtomicReference<String>hql = new AtomicReference<String>(“实体名称.预定义query名称”);
List list =HibernateTemplate().findByNamedQuery(hql,namedQuery 的参数1,nameQuery 参数2,。。。。);
5.11 the JSP specification requires that an attribute name is preceded by whitespace
Jsp 页面两个属性间缺少空格;
5.11:<s:select> 的使用
<s:select list=”${list}” listKey=”id” listValue=”value” headerKey=”defaultKey” headerValue=”defaultValue”key=”xxx”value=”xxx”>
5:14 :hibernate 一对多的保存问题:
在一的一方上设置:设置级联
@OneToMany(cascade = CascadeType.ALL, mappedBy = "sku", fetch = FetchType.LAZY)
5:14 :oracle 字符串为空判断: 只能用 is not null ;不能用 <> 或者!=
5:15 : <s:iterator >
有三个属性:value:被迭代的集合 , status:迭代元素的索引 , id:迭代元素的别名;
<s: iterator value=’page.result’ var=”obj”>
<s:propertyvalue=”#obj.xxx”>
</s:iterator>
5:15: js String.indexOf(str)
判断str在String中第一次出现的位置(从0);若结果为-1:则表示不在该String中;
因此可以用String.indexOf(str)==-1来判断String是否包含str这个字符串;
5:15:
com.opensymphony.xwork2.ActionSupport.getText(StringaTextName)
login.text = 登录//在property中
login.title = %{getText("login.text")}页面
getText(key);可以得到国际化的属性文件中对应key 的值
5:15:hibernate 对对象查询条件进行面向对象的封装
DetachedCriteria dc =DetachedCriteria.forClass(obj.class);
dc.add(Restrictions.like(“attribute”,”value”));//设置xx like xx
dc.add(Restirctions.isNotNull(“attribute”));//设置 xx is not null
dc.addOrder(Order.desc(“attribute”));//设置排序
dc.setProjection(Projections.projectionList()
.add(Projections.rowCount().as("catCountByColor") )
.add( Property.forName("weight").avg().as("avgWeight"))
.add(Property.forName("weight").max().as("maxWeight") )
.add(Property.forName("color").group().as("color" )
)//设置查询的属性
dc.setResultTransformer(DetachedCriteria.DISTINCT_ROOT_ENTITY);//对结果集进行过滤
1. dc.list();//获得结果集方法1
2. getHibernateTemplate().findByCriteria(criteria,index, size);
index:取得结果集的起始位置
size:取得结果集的大小;
5:15: linux 下火狐安装flash 插件
1:下载flash_player;
2: 解压-:tar zxvfflash_player.gz
3:将解压后的 libflashplayer.so文件 放到 /usr/lib/mozilla/plugins/下
4:重启浏览器即可
5.16: html 调用 js 变量:
在html需要显示js变量的位置添加
<script>
Document.write(js变量);
</script>
5.16:Executors.newFixedThreadPool(int )的实现
1. public static ExecutorService newFixedThreadPool(int nThreads) {
2. return new ThreadPoolExecutor(nThreads, nThreads,
3. 0L, TimeUnit.MILLISECONDS,
4. new LinkedBlockingQueue<Runnable>());
5. }
5.16:如何将每天的增量数据放到对应的挖掘数据库中:
每个表均设置一个时间字段:之后按时间取出增量信息
5:17: 消息队列本身是异步的,它允许接收者在消息发送很长时间后再取回消息,这和大多数通信协议是不同的。例如WWW中使用的HTTP协议是同步的,因为客户端在发出请求后必须等待服务器响应。然而,很多情况下我们需要异步的通信协议。比如,一个进程通知另一个进程发生了一个事件,但不需要等待响应。但消息队列的异步特点,也造成了一个缺点,就是接收者必须轮询消息队列,才能收到最近的消息。
5:17:Queue接口:
实现类:LinkList
方法1:移除返回:remove()à队头为空的时候抛出异常;poll()à队头为空的时候放回null
2:插入一个元素:offer();
3:获取但不移除:element();peek();
5:17:StringBuffer 底层实现:是根据char[]
5.17:根据excel 模版生成excel 文件(JXLS使用
)
newXLSTransformer().transformWorkbook(workbook1, map);
<jx:forEachitems="${detaillist}" var="detail" varStatus="status">
${status.index+1}//序号
</jx>
Eg: Resource resource = new ClassPathResource(getText("export.xls.porder"));
HSSFWorkbook workbook1 = new HSSFWorkbook(resource.getInputStream());
int count = workbook1.getNumberOfSheets();
for (int i = count - 1; i >= 0; i--) {
String sheetName =workbook1.getSheetName(i);
if (!sheetName.equals(sheet)) {
workbook1.removeSheetAt(i);
}
}
new XLSTransformer().transformWorkbook(workbook1,map);
setFileName(URLEncoder.encode(sheet,"UTF-8") + ".xls");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
workbook1.write(baos);
baos.flush();
byte[] aa = baos.toByteArray();
setExcelStream(new ByteArrayInputStream(aa, 0, aa.length));
baos.close();
5:struts2 向浏览器发送inputStream
<action name="exportPorder"class="porderAction" method="exportPorder">
<result name="success" type="stream">
<param name="contentType">application/vnd.ms-excel</param>
<param name="inputName">excelStream</param>
<param name="contentDisposition">attachment;filename="${fileName}"</param>
<param name="bufferSize">1024</param>
</result>
</action>
5.18: struts 实现ajax
Action 返回值 null
Jsp:
$.ajax({
url:””,
data:””,
cache:,
type:””,
sync:false/ture,//默认是true
success:function
});
5.18: java 批量提交
1:预处理
conn = DBToolkit.getConnection();
String sql ="insert into testdb.book (kind, name) values (?,?)";
PreparedStatement pstmt= conn.prepareStatement(sql);
pstmt.setString(1,"java");
pstmt.setString(2,"jjjj");
pstmt.addBatch(); //添加一次预定义参数
pstmt.setString(1,"ccc");
pstmt.setString(2,"dddd");
pstmt.addBatch(); //再添加一次预定义参数
//批量执行预定义SQL
pstmt.executeBatch();
2:执行静态的sql
Statement stmt = conn.createStatement();
//连续添加多条静态SQL
stmt.addBatch("insertinto testdb.book (kind, name) values ('java', 'java in aciton')");
stmt.addBatch("insertinto testdb.book (kind, name) values ('c', 'c in aciton')");
stmt.addBatch("deletefrom testdb.book where kind ='C#'");
stmt.addBatch("updatetestdb.book set kind = 'JAVA' where kind='java'");
//注意批量执行不支持Select语句
//执行批量执行
stmt.executeBatch();
5:18
prePareStatement和 statement 的区别
1:prePareStatement: 只用许绑定一条sql; 执行的时候:prePareStatement.execute();
2:statement:允许执行多条sql;执行的时候:statement.execute(sql);
3:对于执行同构的sql(只有值不同,其他结构都相同),用pstm的执行效率比较的高,对于异构的SQL语句,Statement的执行效率要高。
4:当需要外部变量的时候,pstm的执行效率更高.
5:18
$.ajax({
type:"get",
url:"xxx/xx.action",
data:"id="+id,
cache:false,//false将不会从浏览器中加载缓存的信息
success:xxfunction
});
5:21
checkBox 后台action的取值问题;
在action 中获得的值为string[]
eg: String[] values = request.getParameterValues(“name”);
5.21
Struts action配置中
Action 没有class 则默认为:actionSupport
Action 没有method 则默认为:execute();
5.22
Eclipse 中web app libraries 中没有jar 包;
解决:
到工程目录下.settings 下的 org.eclipse.wst.common.component
配置对wb-resource:对应到相应的lib所在的顶级目录
Eg:
<?xml version="1.0"encoding="UTF-8"?>
<project-modulesid="moduleCoreId" project-version="1.5.0">
<wb-module deploy-name="tt.cn">
<wb-resource deploy-path="/" source-path="/WebRoot"/>
<wb-resource deploy-path="/WEB-INF/classes"source-path="/src"/>
<property name="context-root" value="tt.cn"/>
<property name="java-output-path" value="/tt.cn/build/classes"/>
</wb-module>
</project-modules>
5:22 在java 中获得月份的天数
//获得每个月的实际天数
public int getNum4Month(Stringdate){
Calendarcal = new GregorianCalendar();
SimpleDateFormatsimDate = new SimpleDateFormat("",Locale.ENGLISH);
simDate.applyLocalizedPattern("yyyyMM");
try{
cal.setTime(simDate.parse(date));
}catch(Exception e){
e.printStackTrace();
}
int num = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
return num;
}
5:24 后台线程:
后台线程不属于程序中不可或缺的部分;故当所有非后台线程都结束时候后台线程也将被销毁;
后台线程的定义:
Thread th = new Thread(newRunndable);
th.setDaemon(true);
th.start();
5:24 写一个继承于ThreadFactory
作用:可以指定Executors.newCacheThreadPool 的实现方式;
Eg:
Public class DaemonFactory implement ThreadFactory{
PublicThread newThread(Runnable r){
Threadt = new Thread(r);
t.setDaemon(true);
return t;
}
}
Class xxx{
Publicvoid xxx(){
ExecutorServiceex = Executors.newCacheThreadPool(new DaemonFactory());
Ex.executor(newxxxxrunnable());
}
}
5:24 js获得页面高度
<script>
function getInfo()
{
var s = "";
s += " 网页可见区域宽:"+document.body.clientWidth;
s += " 网页可见区域高:"+document.body.clientHeight;
s += " 网页可见区域宽:"+document.body.offsetWidth + " (包括边线和滚动条的宽)";
s += " 网页可见区域高:"+document.body.offsetHeight + " (包括边线的宽)";
s += " 网页正文全文宽:"+document.body.scrollWidth;
s += " 网页正文全文高:"+document.body.scrollHeight;
s += " 网页被卷去的高(ff):"+document.body.scrollTop;
s += " 网页被卷去的高(ie):"+document.documentElement.scrollTop;
s += " 网页被卷去的左:"+ document.body.scrollLeft;
s += " 网页正文部分上:"+ window.screenTop;
s += " 网页正文部分左:"+ window.screenLeft;
s += " 屏幕分辨率的高:"+ window.screen.height;
s += " 屏幕分辨率的宽:"+ window.screen.width;
s += " 屏幕可用工作区高度:"+window.screen.availHeight;
s += " 屏幕可用工作区宽度:"+window.screen.availWidth;
s += " 你的屏幕设置是 "+window.screen.colorDepth +" 位彩色";
s += " 你的屏幕设置 "+window.screen.deviceXDPI +" 像素/英寸";
//alert (s);
}
5:24 判断是否ie浏览器
<script>
if(!+[1,])alert("这是ie浏览器");
else alert("这不是ie浏览器");
</script>
5:28 eclipse 项目无法转化为web 2.5
解决:打开.setting
修改:org.eclipse.wst.common.project.facet.core.xml
<installed facet="jst.web"version="2.5"/>
5:28: 在eclipse 中项目需要具有的libraries
1:Web App Libraries
2:JRE System Library
3:Apache Tomcat v6.0
5:29 mybatis 如何实现多参数查询;
在xxMapper.java 中的的方法:
Public T getAccount(@Param(“name”)Stringname,@Param(“pwd”)String pwd);
在xxx-mapper.xml中
<select id=”xxx”>
Select* from account where username=${name} and password=${pwd}
</select>