<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>华仔的自言自语</title>
    <description>每次难过的时候，就独自去喝二锅头！</description>
    <link>http://javaeye-good.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>使用Struts2 的result 传递参数 </title>
        <author>javaEye_good</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javaeye-good.javaeye.com">javaEye_good</a>&nbsp;
          链接：<a href="http://javaeye-good.javaeye.com/blog/204011" style="color:red;">http://javaeye-good.javaeye.com/blog/204011</a>&nbsp;
          发表时间: 2008年06月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          当使用type＝“redirectAction” 或type＝“redirect”提交到一个action并且需要传递一个参数时。这里是有区别的：<br /> 使用type＝“redirectAction”时，结果就只能写Action的配置名，不能带有后缀:“.action”<br /><pre name="code" class="java">     
&lt;action name="Login" class="steven.actions.LoginAction">
  &lt;result name="success" type="redirectAction">User?u_id=${loginBean.u_id}&lt;/result>
&lt;/action></pre><br />使用type＝“redirect”时，结果应是action配置名＋后缀名<br /><pre name="code" class="java">&lt;action name="Login" class="steven.actions.LoginAction">
   &lt;result name="success" type="redirect">User.action?u_id=${loginBean.u_id}&lt;/result>
&lt;/action></pre>
          <br/>
          <span style="color:red;">
            <a href="http://javaeye-good.javaeye.com/blog/204011#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 16 Jun 2008 10:39:40 +0800</pubDate>
        <link>http://javaeye-good.javaeye.com/blog/204011</link>
        <guid>http://javaeye-good.javaeye.com/blog/204011</guid>
      </item>
      <item>
        <title>用intelliJ IDEA7.0 创建第一个Struts2的CRUD应用</title>
        <author>javaEye_good</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javaeye-good.javaeye.com">javaEye_good</a>&nbsp;
          链接：<a href="http://javaeye-good.javaeye.com/blog/197879" style="color:red;">http://javaeye-good.javaeye.com/blog/197879</a>&nbsp;
          发表时间: 2008年05月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          (一),到struts官方网站下载struts-2.0.11.1-all.zip.URL:http://struts.apache.org/download.cgi#struts20111<br />(二),打开intelliJ IDEA新建空的Web Application<br />右键工程加入struts2的jar包：<br />commons-logging-1.0.4.jar，<br />freemarker-2.3.8.jar，<br />ognl-2.6.11.jar，<br />struts2-core-2.0.11.1.jar，<br />xwork-2.0.4.jar<br />(三),一切就绪，开始编码<br />首先配置web.xml，代码如下：<pre name="code" class="java">  
&lt;filter>
 &lt;filter-name>struts2&lt;/filter-name>
  &lt;filter-class>
   org.apache.struts2.dispatcher.FilterDispatcher
  &lt;/filter-class>
&lt;/filter>
&lt;filter-mapping>
  &lt;filter-name>struts2&lt;/filter-name>
  &lt;url-pattern>/*&lt;/url-pattern>
&lt;/filter-mapping></pre><br />(四),在工程的src下新建struts.xml,struts.properties.这两个文件分别对应struts2-core-2.0.11.1.jar下的struts-default.xml和default.properties当然你可以到struts2-core-2.0.11.1.jar下拷贝这两个文件并做适当的修改。struts.properties这里不做任何修改<br />struts.xml的代码如下：<br /><pre name="code" class="java">
&lt;?xml version="1.0" encoding="UTF-8" ?>
&lt;!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

&lt;struts>
   &lt;include file="struts-default.xml"/>
    &lt;package name="default" extends="struts-default" namespace="/user">
       &lt;action name="List" class="user.actions.UserAction" method="listUser">
          &lt;result name="success">/user/listUser.jsp&lt;/result>
       &lt;/action>
       &lt;action name="Edit" class="user.actions.UserAction" method="simpleUser">
          &lt;result name="success">/user/editUser.jsp&lt;/result>
       &lt;/action>
        &lt;action name="Delete" class="user.actions.UserAction" method="removeUser">
             &lt;result name="success" type="redirect">List.action&lt;/result>
        &lt;/action>
        &lt;action name="Store" class="user.actions.UserAction" method="storeUser">
             &lt;result name="success" type="redirect">List.action&lt;/result>
        &lt;/action>
    &lt;/package>
&lt;/struts>
</pre><br />(五),新建Action代码如下：<br /><pre name="code" class="java">
package user.actions;

import com.opensymphony.xwork2.ActionSupport;

import java.util.Collection;

import user.model.User;
import user.dao.UserDao;

public class UserAction extends ActionSupport {
    private String userID;
    private String[] userIDs;
    private User user;
    private Collection&lt;User> users;
    
    private UserDao userDao = UserDao.getInstance();
    
    public UserAction(){}

    public String execute() throws Exception {
        return super.execute();
    }

    public String getUserID() {
        return userID;
    }

    public void setUserID(String userID) {
        this.userID = userID;
    }

    public String[] getUserIDs() {
        return userIDs;
    }

    public void setUserIDs(String[] userIDs) {
        this.userIDs = userIDs;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public Collection&lt;User> getUsers() {
        return users;
    }

    public void setUsers(Collection&lt;User> users) {
        this.users = users;
    }

    public UserDao getUserDao() {
        return userDao;
    }

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
    //==============================
    //all users
    public String listUser(){
        users = userDao.getUsers();
        return SUCCESS;
    }
    //simple user
    public String simpleUser(){
        user = userDao.getUser(userID);
        return SUCCESS;
    }
    //store user
    public String storeUser(){
        userDao.storeUser(user);
        return SUCCESS;
    }
   //delete users
    public String removeUser(){
        if(userID != null)
           userDao.deleteUser(userID);
        else
           userDao.removeUsers(userIDs);
        return SUCCESS;
    }
}</pre><br />(六),Dao这里简单起见并没有连接数据库，而是用ConcurrentHashMap作为数据源<br /><pre name="code" class="java">
package user.dao;

import user.model.User;

import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.ConcurrentHashMap;
import java.util.Collection;

/**
 * Created by IntelliJ IDEA.
 * User: ibm
 * Date: 2008-5-27
 * Time: 14:23:17
 * To change this template use File | Settings | File Templates.
 */
public class UserDao {

    private static ConcurrentMap&lt;String, User> dataMap;
    private static UserDao userDao = new UserDao();
    
    static{
        dataMap = new ConcurrentHashMap&lt;String,User>();
        dataMap.put("1000",new User("1000","jim","123","beijing"));
        dataMap.put("1001",new User("1001","steven","234","shanghai"));
        dataMap.put("1002",new User("1002","oscar","123","shanghai"));
    }
    
    public UserDao(){}

    public static UserDao getInstance(){
        return userDao;
    }
    public User getUser(String userID){
        return dataMap.get(userID);
    }
    public Collection&lt;User> getUsers(){
        return dataMap.values();
    }
    public void removeUsers(String[] userid){
         for(String uid:userid){
             dataMap.remove(uid);
         }
    }
    public void deleteUser(String userID){
          dataMap.remove(userID);
    }
    public void storeUser(User user){
        dataMap.put(user.getUserID(),user);
    }
}</pre><br />(七),Model数据Bean<br /><pre name="code" class="java">
package user.model;

/**
 * Created by IntelliJ IDEA.
 * User: ibm
 * Date: 2008-5-27
 * Time: 14:02:23
 * To change this template use File | Settings | File Templates.
 */
public class User {
    private String userID;
    private String userName;
    private String passWord;
    private String address;

    public User(){}
    public User(String userID,String userName,String passWord,String address){
        this.userID = userID;
        this.passWord = passWord;
        this.userName = userName;
        this.address = address;
    }
    public String getUserID() {
        return userID;
    }

    public void setUserID(String userID) {
        this.userID = userID;
    }

    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 String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}
</pre><br />(八),页面显示listUser.jsp<br /><pre name="code" class="java">
&lt;s:form id="formSubmit" action="Delete" theme="simple">
  &lt;s:iterator value="users">
    &lt;tr>
      &lt;td>
      &lt;input type="checkbox" name="userIDs" value="&lt;s:property    value='userID'/>"/>
      &lt;/td>
      &lt;td>&lt;s:property value="userID"/>&lt;/td>
      &lt;td>&lt;s:property value="userName"/>&lt;/td>
      &lt;td>&lt;s:property value="passWord"/>&lt;/td>
      &lt;td>&lt;s:property value="address"/>&lt;/td>
      &lt;td>
      &lt;s:url id="edit" action="Edit" namespace="/user">&lt;s:param   name="userID" value="userID"/>&lt;/s:url>&lt;a href="${edit}">EDIT&lt;/a>
      &lt;/td>
      &lt;td>
       &lt;s:url id="delete" action="Delete" namespace="/user">
          &lt;s:param name="userID" value="userID"/>&lt;/s:url>&lt;a href="${delete}">DELETE&lt;/a>
       &lt;/td>            
     &lt;/tr>
 &lt;/s:iterator>
&lt;s:a href="javaScript:sunmit();">Delete!&lt;/s:a>
&lt;s:a href="editUser.jsp">Add user!&lt;/s:a>
&lt;/s:form></pre><br />(九),编辑添加页面editUser.jsp<br /><pre name="code" class="java">
     &lt;s:if test="null == user">
          ADD USER!
      &lt;/s:if>
      &lt;s:else>
          EDIT USER!
      &lt;/s:else>
      &lt;s:form action="Store" name="/user">
          &lt;s:textfield name="user.userID" label="USERID:"/>
          &lt;s:textfield name="user.userName" label="USERNAME:"/>
          &lt;s:textfield name="user.passWord" label="PASSWORD:"/>
          &lt;s:textfield name="user.address" label="ADDRESS:"/>
          &lt;s:submit value="submit"/>
      &lt;/s:form></pre><br />到此一个简单的入门struts2应用就算完成了。由于很简单这里并没有加入struts2的验证框架。
          <br/>
          <span style="color:red;">
            <a href="http://javaeye-good.javaeye.com/blog/197879#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 28 May 2008 15:44:52 +0800</pubDate>
        <link>http://javaeye-good.javaeye.com/blog/197879</link>
        <guid>http://javaeye-good.javaeye.com/blog/197879</guid>
      </item>
      <item>
        <title>java读取配置文件</title>
        <author>javaEye_good</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javaeye-good.javaeye.com">javaEye_good</a>&nbsp;
          链接：<a href="http://javaeye-good.javaeye.com/blog/197152" style="color:red;">http://javaeye-good.javaeye.com/blog/197152</a>&nbsp;
          发表时间: 2008年05月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          （1）利用java.util.Properties读取属性文件<br />     properties属性文件config.properties：<br /><pre name="code" class="java">
business.class=spring.Business
writer.class=spring.FloppyWriter
</pre><br /><br /><pre name="code" class="java">
InputStream is = this.getClass().getClassLoader().getResourceAsStream("config.properties");
Properties pro = new Properties();
pro.load(is);
String businessClass = properties.getProperty("business.class");
String writerClass = properties.getProperty("writer.class");
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://javaeye-good.javaeye.com/blog/197152#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 26 May 2008 17:40:25 +0800</pubDate>
        <link>http://javaeye-good.javaeye.com/blog/197152</link>
        <guid>http://javaeye-good.javaeye.com/blog/197152</guid>
      </item>
  </channel>
</rss>