0%

字符串要先转换成Date对象:

        String dateStr="2012-08-02";  
        String pattern="yyyy-MM-dd";  
        SimpleDateFormat dateFormat=new SimpleDateFormat(pattern);  
        try {
            Date date=dateFormat.parse(dateStr);
            Calendar calendar=Calendar.getInstance();  
            calendar.setTime(date);  
            System.out.println(calendar.get(Calendar.YEAR));
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

最近在做智能电话的开发,屏幕分辨率800X480,图片也是按这个分辨率裁的,在手机上测试完全正常,可一放到电话上就出现图片模糊,色块的问题。最后找到解决方法,先确定机器适配的是hdpi,mdpi还是ldpi,再决定图片存放的目录。电话机屏幕比较大,大约7寸,而分辨率小,适应的是mdpi,但是我把所有图片都放到hdpi里了,虽然可以读取,但已经不是原先的图片了,android作了处理,导致图片失真。

即使把width和height设成了fill_parent,程序还是不能全屏。解决方法: 在AndroidManifest.xml中加上

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="8" />

值根据自己情况填写,3以上就行

解决方法是我们自己写个new Date函数:

function NewDate(str) { 
    if(str==null)
        return false;
    str = str.split('-'); 
    var date = new Date(); 
    date.setUTCFullYear(str[0], str[1] - 1, str[2]); 
    date.setUTCHours(0, 0, 0, 0); 
    return date; 
}

在ListView里,HeaderView和FooterView也占一行,与其他的item一样,可以点击,有索引,HeaderView的索引为0.如果要使这两项不可点击,可以使用下面的方法:

public void addFooterView(View v, Object data, boolean isSelectable) 
public void addHeaderView(View v, Object data, boolean isSelectable) 

如果在view里已经填充数据,第二个参数可以为空,第三个参数设为false,即不可选择

Launcher就是一个普通的应用,不需要在系统级实现。与普通的应用区别在于AndroidManifest.xml中声明:

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" 
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
        >
        <activity
            android:name=".MyLauncherActivity"
            android:clearTaskOnLaunch="true"
            android:label="@string/app_name"
            android:launchMode="singleTask"
            android:screenOrientation="nosensor"
            android:stateNotNeeded="true"
            android:windowSoftInputMode="stateUnspecified|adjustPan" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.HOME" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.MONKEY" />
            </intent-filter>
        </activity>
    </application>

上面的声明同时把状态栏隐藏了。在按Home键时,会弹出选择是启动系统自带的Launcher还是我们的Launcher,可以把我们的Launcher设为默认,重启机器后,启动的就是我们的Launcher,按返回键,Home键,显示的也是我们的Launcher.

使用portlets目录下的create.bat批处理创建,第一次提示,ecj未安装,其实是因为没配置jdk环境变量,配置一下。 第一次提示: D:\Liferay\plugins\portlets\build.xml:172: D:\Liferay\plugins\portlets\Liferaybu ndlesliferay-portal-6.1.0-ce-ga1 omcat-7.0.23\webapps\ROOT\WEB-INF\tld do es not exist. 有些莫名其妙,中间确实是空的,这是因为配置app.server.dir时直接从文件管理器地址栏复制了,目录分割符是\,应该改成/. app.server.dir在plugins目录下的build.系统登录用户名.properties里配置。

        <!-- 
            在Action中把List<Person>类型变量allPerson存在request中,id属性定义一个正在被迭代的对象名,用于标签内部引用
         -->
        <s:iterator value="#request.allPerson" id="person">
            <tr>
                <!-- value直接取Person的属性名,通过%

程序功能为注册用户,显示用户信息。分四层:jsp,action,service,DAO 1、在lib目录加入struts2与hibernate的包。我是用 2、在web.xml增加struts2的过滤器 3、注册表单,register.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>


  
    My JSP 'register.jsp' starting page
  
  
    
        用户名: 
        密码:
        年龄:
         
    
  

4、建Model:建包com.model,类Person

package com.model;

import java.sql.Date;

public class Person {
    private Integer id;
    //最好用Integer而不是用int,后面查询需要Integer
    private String username;
    private String password;
    private Integer age;
    private Date registerDate;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }

    public Date getRegisterDate() {
        return registerDate;
    }
    public void setRegisterDate(Date registerDate) {
        this.registerDate = registerDate;
    }
}

5、配置Model与数据库字段的映射,在src目录下添加Person.hbm.xml(不是严格要求的):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <!-- name类名,table表名 -->
    <class name="com.model.Person" table="person">
        <!-- id标签表示主键 -->
        <id name="id" column="id" type="int">
            <!-- 自动增长 -->
            <generator class="increment"></generator>
        </id>
        <!-- 下面是字段映射 name属性,column是字段 type数据库类型 -->
        <property name="username" column="username" type="string"></property>
        <property name="password" column="password" type="string"></property>
        <property name="age" column="age" type="int"></property>
        <property name="registerDate" column="registerDate" type="date"></property>
    </class>
</hibernate-mapping>

6、配置Hibernate数据库连接,src目录下建hibernate.cfg.xml(可改名,但不建议),内容如下:

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
        <property name="connection.username">root</property>
        <property name="connection.password"></property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <!-- 设置dialect属性可以使用该类型数据库特性 -->
        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
        <!-- 在命令行输出SQL语句 -->
        <property name="show_sql">true</property>
        <!-- Model属性与数据库字段的映射文件 -->
        <mapping resource="Person.hbm.xml" />
    </session-factory>
</hibernate-configuration>

注意,需要导入mysql jdbc驱动jar包. 7、数据库连接与关闭:包com.util类HibernateUtil

package com.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
    private static SessionFactory sessionFactory;
    //因为sessionFactory一旦生成就不需要关闭,即使配置文件修改也不会影响,所以放在静态代码片段中,类加载时就生成
    static{
        sessionFactory=new Configuration().configure().buildSessionFactory();
    }
    public static Session openSession()
    {
        Session session=sessionFactory.openSession();
        return session;
    }
    public static void close(Session session)
    {
        if(session!=null)
        {
            session.close();
        }
    }
}

8、写DAO层(调用Hibernate API与数据库交互),建包com.dao,接口PersonDAO,内容如下:

package com.dao;
import com.model.Person;
public interface PersonDAO {
    public void savePerson(Person person);
    public Person showPerson(Integer id);
}

一个保存用户(注册),一个返回指定ID的用户。 实现:包com.dao.impl,类PersonDAOImpl:

package com.dao.impl;

import org.hibernate.Transaction;

import com.dao.PersonDAO;
import com.model.Person;
import com.util.HibernateUtil;

public class PersonDAOImpl implements PersonDAO {

    @Override
    public void savePerson(Person person) {
        //开启session,与HttpSession完全没有任何关系,相当于一个数据库连接对象
        org.hibernate.Session session = HibernateUtil.openSession();
        Transaction tx = session.beginTransaction();
        //开启事务
        try {
            //插入
            session.save(person);
            tx.commit();
        } catch (Exception ex) {
            if (null != tx) {
                tx.rollback();
                //失败回滚
            }

        } finally {
            //关闭session
            HibernateUtil.close(session);
        }

    }

    @Override
    public Person showPerson(Integer id) {
        // TODO Auto-generated method stub
        org.hibernate.Session session = HibernateUtil.openSession();
        //get方法取出对象
        Person person = (Person) session.get(Person.class, id);
        return person;
    }
}

9、Service层,主要功能是逻辑处理,这里是与DAO层交互,即调用DAO层方法取出数据: 建com.service包,类PersonService:

package com.service;

import com.model.Person;

public interface PersonService {
    public void savePerson(Person person);
    public Person showPerson(Integer id);
}

实现类PersonServiceImpl,包com.service.impl中

package com.service.impl;

import com.dao.PersonDAO;
import com.dao.impl.PersonDAOImpl;
import com.model.Person;
import com.service.PersonService;

public class PersonServiceImpl implements PersonService {
    @Override
    public void savePerson(Person person) {
        // TODO Auto-generated method stub
        PersonDAO personDAO=new PersonDAOImpl();
        personDAO.savePerson(person);
    }
    @Override
    public Person showPerson(Integer id) {
        // TODO Auto-generated method stub
        PersonDAO personDAO=new PersonDAOImpl();
        Person person=personDAO.showPerson(id);
        return person;
    }
}

10、建Action(接收用户请求,作简单的包装),包com.action,类PersonAction,这里把查询和注册的方法写在同一个action中。

package com.action;

import org.apache.struts2.ServletActionContext;

import com.model.Person;
import com.opensymphony.xwork2.ActionSupport;
import com.service.PersonService;
import com.service.impl.PersonServiceImpl;

public class PersonAction extends ActionSupport {
    private String username;
    private String password;
    private Integer age;
    private Integer id;
    
    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    /**
     * 保存用户
     * @return
     * @throws Exception
     */
    public String savePerson() throws Exception {
        // TODO Auto-generated method stub
        Person person=new Person();
        person.setAge(age);
        person.setPassword(password);
        person.setUsername(username);
        
        java.sql.Date registerDate=new java.sql.Date(new java.util.Date().getTime());
        person.setRegisterDate(registerDate);
        
        PersonService personService=new PersonServiceImpl();
        personService.savePerson(person);
        
        return SUCCESS;
    }
    /**
     * 取用户
     * @return
     * @throws Exception
     */
    public String showPerson() throws Exception{
        PersonService personService=new PersonServiceImpl();
        Person person=personService.showPerson(id);
        ServletActionContext.getRequest().setAttribute("person", person);
        return SUCCESS;
    }
}

struts.xml中配置Action:

    <package name="struts2_hibernate" extends="struts-default">
        <action name="savePerson" class="com.action.PersonAction" method="savePerson">
        </action>
        <action name="showPerson" class="com.action.PersonAction" method="showPerson">
            <result name="success">/showPerson.jsp</result>
        </action>
    </package>

savePerson没有写result,所以添加成功后返回404. 显示用户信息的jsp,showPerson.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>


  
    My JSP 'showPerson.jsp' starting page
  
  
    ${person.username }
    ${person.password }
    ${person.age }
  

启动服务器测试前,先在数据库中建好相应的表 注册用户:http://localhost:8080/hibernate/register.jsp 查看用户:http://localhost:8080/hibernate/showPerson.action?id=用户id

下面是在JSP上使用struts2和OGNL读取Action中数据的例子。 Cat:

package com.action.ognl;

public class Cat {
    private String name;
    private int age;
    private String color;
    
    public Cat(String name,int age,String color)
    {
        this.name=name;
        this.age=age;
        this.color=color;
    }
    public Cat()
    {
        
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
    
}

Person:

package com.action.ognl;

import java.util.Map;

public class Person {
    private String name;
    private int age;
    private String address;
    private String[] friends;
    private Cat cat;
    private Map map;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    public String[] getFriends() {
        return friends;
    }
    public void setFriends(String[] friends) {
        this.friends = friends;
    }
    public Cat getCat() {
        return cat;
    }
    public void setCat(Cat cat) {
        this.cat = cat;
    }
    public Map getMap() {
        return map;
    }
    public void setMap(Map map) {
        this.map = map;
    }
    public Person(String name, int age, String address, String[] friends,
            Cat cat, Map map) {
        super();
        this.name = name;
        this.age = age;
        this.address = address;
        this.friends = friends;
        this.cat = cat;
        this.map = map;
    }
    public Person() {

    }
    
}

OgnlAction:

package com.action.ognl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionSupport;

public class OgnlAction extends ActionSupport implements RequestAware,SessionAware,ApplicationAware {
    String username;
    private String password;
    private Map requestMap;
    private Map sessionMap;
    private Map applicationMap;
    private List list;
    
    public OgnlAction() {
        list=new ArrayList();
    }
    public List getList() {
        return list;
    }

    public void setList(List list) {
        this.list = list;
    }

    @Override
    public void setRequest(Map arg0) {
        // TODO Auto-generated method stub
        this.requestMap=arg0;
    }

    @Override
    public void setApplication(Map arg0) {
        // TODO Auto-generated method stub
        this.applicationMap=arg0;
    }

    @Override
    public void setSession(Map arg0) {
        // TODO Auto-generated method stub
        this.sessionMap=arg0;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        System.out.println("setUsername");
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
    
    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        requestMap.put("hello", "world");
        sessionMap.put("hello", "world");
        applicationMap.put("hello", "world");
        
        Cat cat1=new Cat("cat1",20,"red");
        Cat cat2=new Cat("cat2",30,"black");
        
        String[] friends1={"test1","test2","test3"};
        String[] friends2={"welcom1","welcom2","welcom3"};
        
        Map map1=new HashMap();
        Map map2=new HashMap();
        map1.put("test1", "test1");
        map1.put("test2", "test2");
        
        map2.put("hello1", "hello1");
        map2.put("hello2", "hello2");
        Person person1=new Person("zhangsan", 20, "beijing", friends1, cat1, map1);
        Person person2=new Person("lisi", 40, "hangzou", friends2, cat2, map2);
        System.out.println(person1);
        list.add(person1);
        list.add(person2);
        
        return SUCCESS;
    }
    
}

Ognl.jsp(OgnlAction的result定义转发)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>




Insert title here


取Action中的属性
username:
password:

取post,get参数:
username:
password:

取request,session,application属性
request:
session:
application:

取对象各种属性:
Person1.address:
Person2.age:
Person2.map:

过滤:

    name:
    address:

投影(取指定属性):