在修改好相应的文字与图象之后,我们就将psd文件输出(x)html文件。
首先得先对psd文件做切片,有两种方法:
①使用工具栏上的“切片工具”,
然后在图象上划出一块一块的区域。
②使用基于参考线的切片,按ctrl r调出标尺栏,
把鼠标移动到标尺上,按住鼠标左键,移动到图象上,将会看到一条绿色的参考线,如图
将参考线;排好,然后点一下工具栏上的切片工具图表,然后点上面
选项栏里的“基于参考线的切片”。于是在原来的参考线上就变成了一块一块的切片了。
********************************************************************************
接下来就可以输出了:
①依次选择菜单栏上的“文件”→“存储为web所用格式”→“存储”。
②接下来就会弹出一个“将优化结果存储为”的窗口。
在“保存类型”处有个下拉列框可以选择,因为我们要存储为网页的格式,所以选择“html和图象(* html)”,再选择“保存”就可以输出一个网页格式的html文件与一个包含图象的名为“images”的文件夹。
③如果我们需要输出“div css的网页”我们还可以这么做:
在“设置”处的下拉列框,选择“其他”
就会弹出一个“输出设置”的窗口
在第2个下拉列框处选择“切片”,选择“生成css”,单击“好”→“保存”,就可以输出一个目前流行的“div css”的html网页。
文档流中其它元素的布局就像绝对定位的元素不存在一样:
var store = new ext.data.jsonstore({
url: 'get-images.php',
root: 'images',
fields: [
'name', 'url',
{name:'size', type: 'float'},
{name:'lastmod', type:'date', dateformat:'timestamp'}
]
});
store.load();
var tpl = new ext.xtemplate(
'for=".">' ,
'"thumb-wrap" id="{name}">',
'"thumb">"{url}" title="{name}">',
'"x-editable">{shortname}',
'',
'"x-clear">'
);
var panel = new ext.panel({
id:'images-view',
frame:true,
width:535,
autoheight:true,
collapsible:true,
layout:'fit',
title:'simple dataview',
items: new ext.dataview({
store: store,
tpl: tpl,
autoheight:true,
multiselect: true,
overclass:'x-view-over', //鼠标悬停item时的类样式,defaults to undefined
itemselector:'div.thumb-wrap', //必须项,值为item选择器,此值也可为.thumb-wrap e.g. div.some-class
//:'x-view-selected', //(默认名)defaults to 'x-view-selected',但仍必须写此类的css内容
emptytext: 'no images to display'
/*
plugins: [
new ext.dataview.dragselector(),
new ext.dataview.labeleditor({dataindex: 'name'})
],*/
preparedata: function(data){ //数据预处理,即数据处理前.data为原始数据,类型为对象.
data.shortname = ext.util.format.ellipsis(data.name, 15); //指定字符串为15个字符,超出部分用三个圆点代替.
// data.sizestring = ext.util.format.filesize(data.size);
// data.datestring = data.lastmod.format("m/d/y g:i a");
return data;
},
listeners: {
selectionchange: { //结点的选择发生改变时,即重新选择结点时,可以更改为selectionchange:function(dv,nodes)...
fn: function(dv,nodes){
var l = nodes.length;
var s = l != 1 ? 's' : '';
panel.settitle('simple dataview (' l ' item' s ' selected)');
}
}
})
});
panel.render(document.body);
dataview 用store提供的数据流,采用tpl的格式显示,itemselector的值为数据流中块的css类选择器,对块操作时更换其css类样式,如鼠标悬停在块上和块被选定时的css类样式;简单点说,就是有利于对数据流中的块好控制操作.
tpl定义的块:<div id="zack_hat.jpg" class="thumb-wrap">
鼠标悬停时的块(overclass):<div id="zack_hat.jpg" class="thumb-wrap x-view-over">
点击被选中的块(selectedclass):<div id="kids_hug2.jpg" class="thumb-wrap x-view-selected">
1.当鼠标点击数据流中某一块时,块增加selectedclass定义的类样式,如没定义类名,即采用默认的类名'x-view-selected'(css内容依然为空,仍需手写,只是类名必须为此);
2.用overclass定义的css类样式,鼠标悬停在块(div)上,更换其css类样式.
3.dataview.store.filter(f1,f2):从store中查找f1字段,与f2匹配(不完全匹配相同)过滤,重新本地加载数据.
4.dataview.store.store(f1,'asc'/'desc'):store的内容按f1的值排序.
5.dataview.store.clearfilter():清除过滤状态.还原初始.
6.dataview.select(n):更换第n个块的css类样式.
(二)html:
-->
(3)faces-config.xml
(4)设置过滤器,解决乱码问题
详见:第二条
以上配置完成后.jsf就可以访问spring管理的bean.
四.spring hiberante集成时,asm-2.2.3.jar与asm.jar冲突:
org.springframework.beans.factory.beancreationexception: error creating bean with name 'sessionfactory' defined in class path resource [applicationcontext.xml]: invocation of init method failed; nested exception is java.lang.nosuchmethoderror: org.objectweb.asm.classvisitor.visit(iiljava/lang/string;ljava/lang/string;[ljava/lang/string;ljava/lang/string;)v
...
caused by: java.lang.nosuchmethoderror: org.objectweb.asm.classvisitor.visit(iiljava/lang/string;ljava/lang/string;[ljava/lang/string;ljava/lang/string;)v
正确的解决方法:
是到项目的发布文件夹\web-inf\lib下删除asm-2.2.3.jar,不能用myeclipse里删除.因为他在发布时仍没删除.
五.创建进行分类的包.
com.dao(数据访问层), com.service(业务层), com.web(表示层)
六.创建类.(完成model层设计).
*****************************(也可以利用myeclipse反向orm功能自动产生,但应注意自动配置引起的"类完全名"的错误)*******************
(一)数据访问层(dao)开发:
spring 配置文件(附加)
(1)配置数据源 <bean id="datasource" ...> //myeclipse hibernate自动反转工具自动配置
(2)配置会话工厂 <bean id="sessionfactory" ...> //myeclipse hibernate自动反转工具自动配置
(3)配置事务管理器
(5)数据访问层bean作为属性注入业务层property中. (注:不要用new创建数据访问层对象,否则得不到servletcontext而报错.)
例:
/**数据访问层bean(myeclipse hibernate自动反转工具配置)*/
/**业务层bean(myeclipse spring配置文档中可以配置,但需先定义好相关类)*/
userdao" />
1. 创建 数据访问层接口: 必须创建,详见:
public interface 数据访问层接口 { //在类已存在的情况下,添加其接口:refactor(重构)->extract interfaces提取接口
public string add...();
public string save...();
...... //update, delete, load
}
2 .创建数据访问层实现类 //orm反向功能自动配置
public class 数据访问层实现类 extends hibernatedaosupport implements 数据访问层接口 {
...... //gethibernatetemplate().save(user)
}
在实现类的方法(throw dataaccessexception)中封装 gethibernatetemplate().save(user) 等spring已封装的持久化方法.(注:如果使用hibernate api 要用try{...}catch{...}自行处理导常.)
3.注意事项: could not initialize proxy - no session 异常, 可能是没有联表查询.详见
*****************************(也可以利用myeclipse反向orm功能自动产生)***********************************
(二)业务逻辑层(service)开发:
1.创建业务逻辑层接口.
package com.service;
import com.dao.checkdao;
public interface icheckservice {
public abstract checkdao getcheckdao();
public abstract void setcheckdao(checkdao checkdao);
public abstract string searchcheck();
}
2.创建业务逻辑层实现类
public class 业务逻辑层实现类 implements 业务逻辑层接口.
在实现类中. 引用的数据访问层对象实例采用di的设值方式注入
在业务逻辑方法(throw dataaccessexception)中,使用数据访问层对象实例来访问数据库.
package com.service;
import java.util.list;
import org.json.simple.jsonarray;
import org.json.simple.jsonobject;
import com.dao.check;
import com.dao.checkdao;
import com.dao.icheckdao;
public class checkservice implements icheckservice {
private checkdao checkdao;
public checkdao getcheckdao() {
return checkdao;
}
public void setcheckdao(checkdao checkdao) {
this.checkdao = checkdao;
}
public string searchcheck(){
list
jsonarray ja=new jsonarray();
jsonobject jo=new jsonobject();
for(check c:l){
// jo.put("department", c.getdepartment());
// jo.put("checkid", c.getcheckid());
// jo.put("nam", c.getnam());
// jo.put("num", c.getnum());
// jo.put("ondutytime", c.getondutytime());
// jo.put("offdutytime", c.getoffdutytime1());
// jo.put("registerdate", c.getregisterdate());
// jo.put("overtime", c.getovertime());
// ja.add(jo.clone());
// jo.clear();
}
return "";
}
}
3.数据访问层bean作为属性注入业务逻辑层实现类的property中. (注:不要用new创建数据访问层对象,否则得不到servletcontext而报错.)
例:
/**数据访问层bean(hibernate自动反转工具自动配置)*/
/**业务逻辑层bean(spring配置文档中手动配置,但需先定义好相关类)*/
userdao" />
(三).表示层开发
(1)在 faces-config.xml 中配置托管bean.(实现控制层层设计)
业务层bean作为属性注入control层中.
package com.web;
import com.service.icheckservice;
public class searchall {
private icheckservice searchservice;
private string searchdata;
public searchall() {
}
public icheckservice getsearchservice() {
return searchservice;
}
public void setsearchservice(icheckservice searchservice) {
this.searchservice = searchservice;
}
public string getsearchdata() {
searchdata = searchservice.searchcheck();
return searchdata;
}
public void setsearchdata(string searchdata) {
this.searchdata = searchdata;
}
}
(2)bean访问客户端传来的参数值
httpservletrequest request=(httpservletrequest) facescontext.getcurrentinstance().getexternalcontext().getrequest();
string s=request.getparameter("webnam");
七.页面设计.(实现view层设计)
index.faces:(共二行)
<%@ page language="java" pageencoding="utf-8"%> //解决extjs 接收数据中有中文出现"?????"等乱码
${searchall.searchdata} //解决js接收数据.ext.store({url:index.faces,...})
页面中访问bean的二种方法
方法一:直接在.faces页面中使用${userbean.property} (推荐) //property:get/set methord
注,不能使用${userbean.method}
名稱1: ${userbean.searchdata} //正确
//#{userbean.searchdata} //报错
名稱2:
//
// //报错
名稱3: //正确,而且仍然可以使用jsf的managedbean
jsf表达式#{...}只能用在jsf标签里,jsp表达式${...}也只能用jsp页面里.
jsp el的语法格式:${...} 不能放在<%...%>中.
方法二: 在.jsp页面中,直接获取业务层定义的bean
<%@ page import="javax.servlet.servletcontext" %>
<%@ page import="org.springframework.context.applicationcontext" %>
<%@ page import="org.springframework.web.context.support.webapplicationcontextutils" %>
<%
//获取applicationcontext对象
servletcontext servletcontext = request.getsession().getservletcontext();
applicationcontext ac = webapplicationcontextutils.getwebapplicationcontext(servletcontext);
//获取applicationcontext.xml文件中定义的bean
userserviceps=(userservice)ac.getbean("userservice");
八.导出war
file->export->j2ee->war file