??xml version="1.0" encoding="utf-8" standalone="yes"?>国产一二在线播放,一本色道久久综合亚洲aⅴ蜜桃 ,日韩精品一区二区三区四区五区 http://www.aygfsteel.com/gdufo/category/32634.htmlzh-cnTue, 30 Sep 2008 02:17:03 GMTTue, 30 Sep 2008 02:17:03 GMT60Struts2 ?Result?Chain Result,Redirect Action Result,Redirect Result 三者之间的区别http://www.aygfsteel.com/gdufo/archive/2008/09/28/231621.htmlgdufogdufoSun, 28 Sep 2008 03:09:00 GMThttp://www.aygfsteel.com/gdufo/archive/2008/09/28/231621.htmlhttp://www.aygfsteel.com/gdufo/comments/231621.htmlhttp://www.aygfsteel.com/gdufo/archive/2008/09/28/231621.html#Feedback0http://www.aygfsteel.com/gdufo/comments/commentRss/231621.htmlhttp://www.aygfsteel.com/gdufo/services/trackbacks/231621.html阅读全文

gdufo 2008-09-28 11:09 发表评论
]]>
eXtremeComponents安装配置http://www.aygfsteel.com/gdufo/archive/2008/09/04/227052.htmlgdufogdufoThu, 04 Sep 2008 12:35:00 GMThttp://www.aygfsteel.com/gdufo/archive/2008/09/04/227052.htmlhttp://www.aygfsteel.com/gdufo/comments/227052.htmlhttp://www.aygfsteel.com/gdufo/archive/2008/09/04/227052.html#Feedback0http://www.aygfsteel.com/gdufo/comments/commentRss/227052.htmlhttp://www.aygfsteel.com/gdufo/services/trackbacks/227052.html阅读全文

gdufo 2008-09-04 20:35 发表评论
]]>
The Yahoo! User Interface Library (YUI)http://www.aygfsteel.com/gdufo/archive/2008/08/28/225416.htmlgdufogdufoThu, 28 Aug 2008 13:23:00 GMThttp://www.aygfsteel.com/gdufo/archive/2008/08/28/225416.htmlhttp://www.aygfsteel.com/gdufo/comments/225416.htmlhttp://www.aygfsteel.com/gdufo/archive/2008/08/28/225416.html#Feedback0http://www.aygfsteel.com/gdufo/comments/commentRss/225416.htmlhttp://www.aygfsteel.com/gdufo/services/trackbacks/225416.html阅读全文

gdufo 2008-08-28 21:23 发表评论
]]>
JS的正则表辑ּhttp://www.aygfsteel.com/gdufo/archive/2008/08/26/224883.htmlgdufogdufoTue, 26 Aug 2008 14:57:00 GMThttp://www.aygfsteel.com/gdufo/archive/2008/08/26/224883.htmlhttp://www.aygfsteel.com/gdufo/comments/224883.htmlhttp://www.aygfsteel.com/gdufo/archive/2008/08/26/224883.html#Feedback0http://www.aygfsteel.com/gdufo/comments/commentRss/224883.htmlhttp://www.aygfsteel.com/gdufo/services/trackbacks/224883.html阅读全文

gdufo 2008-08-26 22:57 发表评论
]]>
Appfuse 中用到?DisplayTaghttp://www.aygfsteel.com/gdufo/archive/2008/08/25/224250.htmlgdufogdufoMon, 25 Aug 2008 11:53:00 GMThttp://www.aygfsteel.com/gdufo/archive/2008/08/25/224250.htmlhttp://www.aygfsteel.com/gdufo/comments/224250.htmlhttp://www.aygfsteel.com/gdufo/archive/2008/08/25/224250.html#Feedback0http://www.aygfsteel.com/gdufo/comments/commentRss/224250.htmlhttp://www.aygfsteel.com/gdufo/services/trackbacks/224250.html阅读全文

gdufo 2008-08-25 19:53 发表评论
]]>
Filter与interceptor的区?http://www.aygfsteel.com/gdufo/archive/2008/08/18/222866.htmlgdufogdufoMon, 18 Aug 2008 11:51:00 GMThttp://www.aygfsteel.com/gdufo/archive/2008/08/18/222866.html阅读全文

gdufo 2008-08-18 19:51 发表评论
]]>
实战Struts-Menu(5)http://www.aygfsteel.com/gdufo/archive/2008/08/05/220180.htmlgdufogdufoTue, 05 Aug 2008 07:07:00 GMThttp://www.aygfsteel.com/gdufo/archive/2008/08/05/220180.html
<%@ page contentType="text/html; charset=GBK" %>
<%@ taglib uri="struts-menu" prefix="menu" %>

<p>没有使用Bundle和权限控?
<menu:useMenuDisplayer name="ListMenu" repository="examplesRepository">
    
<menu:displayMenu name="DatabaseMenu"/>
    
<menu:displayMenu name="StandaloneMenu"/>
</menu:useMenuDisplayer></p>

<p>使用Bundle, 没有使用权限控制:
<menu:useMenuDisplayer name="ListMenu" bundle="examplesBundle" repository="examplesRepository">
    
<menu:displayMenu name="DatabaseMenu"/>
    
<menu:displayMenu name="StandaloneMenu"/>
</menu:useMenuDisplayer></p>

<p>使用Bundle和权限控?
<menu:useMenuDisplayer name="ListMenu" permissions="examplesPermession"  bundle="examplesBundle" repository="examplesRepository">
    
<menu:displayMenu name="DatabaseMenu"/>
    
<menu:displayMenu name="StandaloneMenu"/>
</menu:useMenuDisplayer></p>

七、关于Struts-Menu配置文g和API的用方法,请参考附录中的官方网?/p>


附:
Struts-Menu官方|站Q?a >http://struts-menu.sourceforge.net
数据库驱动的动态菜单:http://demo.raibledesigns.com/struts-menu/dynamicMenu.jsp



gdufo 2008-08-05 15:07 发表评论
]]>
实战Struts-MenuQ?)http://www.aygfsteel.com/gdufo/archive/2008/08/05/220178.htmlgdufogdufoTue, 05 Aug 2008 07:05:00 GMThttp://www.aygfsteel.com/gdufo/archive/2008/08/05/220178.html/**
     * 从数据库中读取菜单配|信?br />      * 
     * 
@return
     
*/
    
private Map[] getMenuComponents() {
        ArrayList list 
= new ArrayList();
        Connection conn 
= null;
        PreparedStatement pstmt 
= null;
        ResultSet rest 
= null;
        String sql 
= "select name,parent_name,title,location,description from menu_item order by id";
        
try {
            Class.forName(
"com.mysql.jdbc.Driver").newInstance();
            conn 
= DriverManager.getConnection("jdbc:mysql://localhost/myexamples?user=root&password=mywangya&useUnicode=true&characterEncoding=UTF-8");
            pstmt 
= conn.prepareStatement(sql);
            rest 
= pstmt.executeQuery();
            
while (rest.next()) {
                
int i = 1;
                HashMap map 
= new HashMap();
                map.put(
"name", rest.getString(i++));
                map.put(
"parent_name", rest.getString(i++));
                map.put(
"title", rest.getString(i++));
                map.put(
"location", rest.getString(i++));
                map.put(
"description", rest.getString(i++));
                list.add(map);
            }
        } 
catch (SQLException ex) {
            ex.printStackTrace();
        } 
catch (InstantiationException e) {
            e.printStackTrace();
        } 
catch (IllegalAccessException e) {
            e.printStackTrace();
        } 
catch (ClassNotFoundException e) {
            e.printStackTrace();
        } 
finally {
            
try {
                
if (null!=rest) rest.close();
                
if (null!=pstmt) pstmt.close();
                
if (null!=conn) conn.close();
            } 
catch (SQLException e) {
                e.printStackTrace();
            }
        }
        
        
return (Map[]) list.toArray(new HashMap[0]);
    }
    
    
/**
     * 构造菜单权?br />      * 
     * 
@param request
     
*/
    
private void buildMenuPermissions(HttpServletRequest request) {
        PermissionsAdapter permession 
= new PermissionsAdapter() {
            
public boolean isAllowed(MenuComponent menu) {
                
// 名称{于StandaloneMenu的菜单不昄
                return !"StandaloneMenu".equalsIgnoreCase(menu.getName());
            }
        };
        request.setAttribute(
"examplesPermession", permession);
    }

    
/**
     * 构造菜单显C标?br />      * 
     * 
@param request
     
*/
    
private void buildMenuResourceBundle(HttpServletRequest request) {
        MenuResourceBundle resourceBundle 
= new MenuResourceBundle();
        request.setAttribute(
"examplesBundle", resourceBundle);
    }
    
    
/**
     * MenuResourceBundle树状菜单国际语言昄
     * 
     * 
@author wenbin.zhang
     *  
     
*/
    
class MenuResourceBundle extends ListResourceBundle {
        
private ArrayList list = new ArrayList();

        
public MenuResourceBundle() {
            Connection conn 
= null;
            PreparedStatement pstmt 
= null;
            ResultSet rest 
= null;
            String sql 
= "select title,titleCN from menu_item order by id";
            
try {
                Class.forName(
"com.mysql.jdbc.Driver").newInstance();
                conn 
= DriverManager.getConnection("jdbc:mysql://localhost/myexamples?user=root&password=mywangya&useUnicode=true&characterEncoding=UTF-8");
                pstmt 
= conn.prepareStatement(sql);
                rest 
= pstmt.executeQuery();
                
while (rest.next()) {
                    
int i = 1;
                    String[] message 
= new String[2];
                    message[
0= rest.getString(i++);
                    
try {
                        message[
1= new String(rest.getString(i++).getBytes("latin1"), "gbk");
                    } 
catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                    }
                    
if (message[0!= null && message[1!= null) {
                        list.add(message);
                    }
                }
            } 
catch (SQLException ex) {
                ex.printStackTrace();
            } 
catch (InstantiationException e) {
                e.printStackTrace();
            } 
catch (IllegalAccessException e) {
                e.printStackTrace();
            } 
catch (ClassNotFoundException e) {
                e.printStackTrace();
            } 
finally {
                
try {
                    
if (null!=rest) rest.close();
                    
if (null!=pstmt) pstmt.close();
                    
if (null!=conn) conn.close();
                } 
catch (SQLException e) {
                    e.printStackTrace();
                }
            }

        }

        
public Object[][] getContents() {
            
return (String[][]) list.toArray(new String[0][0]);
        }
    }
}

> struts-config.xml文g?lt;action-mappings />部分修改为:
<action-mappings>
  
<action path="/menuAction" type="cn.appex.menu.MenuAction" >
    
<forward name="success" path="/struts-menu/dynamic-menu.jsp" />
  
</action>
</action-mappings>


gdufo 2008-08-05 15:05 发表评论
]]>
实战Struts-Menu(3)http://www.aygfsteel.com/gdufo/archive/2008/08/05/220175.htmlgdufogdufoTue, 05 Aug 2008 07:02:00 GMThttp://www.aygfsteel.com/gdufo/archive/2008/08/05/220175.html
INSERT INTO menu_item
    (id
, parent_name, name, title, titleCN, location)
VALUES
    (
1,null,'DatabaseMenu','Database Menu','数据库动态菜?,null),
    (
2,'DatabaseMenu','Yahoo','Yahoo Mail','雅虎邮g','http://mail.yahoo.com'),
    (
3,'DatabaseMenu','JavaBlogs','JavaBlogs','Java博客','http://javablogs.com'),
    (
4,null,'StandaloneMenu','Standalone Menu','独立的菜?,'http://www.sohu.com')
> 数据库驱动E序攑ֈlib目录中,q加入到Build PathQ如MySQL的数据库驱动mysql-connector-java-3.1.8-bin.jarQ解压羃commons- collections-3.1.zipQ将commons-collections-3.1.jar释放到lib目录Qƈ加入Build Path
  > 新徏一个Struts的ActionQ代码如下:

package cn.appex.menu;

import java.io.UnsupportedEncodingException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.ListResourceBundle;
import java.util.Map;

import com.mysql.jdbc.Driver;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import net.sf.navigator.menu.MenuComponent;
import net.sf.navigator.menu.MenuRepository;
import net.sf.navigator.menu.PermissionsAdapter;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class MenuAction extends Action {
    
public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            
throws Exception {
        buildMenuRepository(request);
        buildMenuResourceBundle(request);
        buildMenuPermissions(request);
        
return (mapping.findForward("success"));
    }

    
/**
     * 创徏菜单数据l构
     * 
     * 
@param request
     
*/
    
private void buildMenuRepository(HttpServletRequest request) {
        MenuRepository repository 
= new MenuRepository();
        
// Get the repository from the application scope - and copy the
        
// DisplayerMappings from it.
        MenuRepository defaultRepository = (MenuRepository) request
                .getSession().getServletContext().getAttribute(
                        MenuRepository.MENU_REPOSITORY_KEY);
        repository.setDisplayers(defaultRepository.getDisplayers());

        Map[] menus 
= getMenuComponents();
        
for (int i=0; i < menus.length; i++) {
            MenuComponent mc 
= new MenuComponent();
            Map row 
= menus[i];
            String name 
= (String) row.get("name");
            mc.setName(name);
            String parent 
= (String) row.get("parent_name");
            System.out.println(name 
+ ", parent is: " + parent);
            
if (parent != null) {
                MenuComponent parentMenu 
= repository.getMenu(parent);
                
if (parentMenu == null) {
                    System.out.println(
"parentMenu '" + parent + "' doesn't exist!");
                    
// create a temporary parentMenu
                    parentMenu = new MenuComponent();
                    parentMenu.setName(parent);
                    repository.addMenu(parentMenu);
                }

                mc.setParent(parentMenu);
            }
            String title 
= (String) row.get("title");
            mc.setTitle(title);
            String location 
= (String) row.get("location");
            mc.setLocation(location);
            String description 
= (String) row.get("description");
            mc.setDescription(description);
            repository.addMenu(mc);
        }
        
        request.setAttribute(
"examplesRepository", repository);
    }


gdufo 2008-08-05 15:02 发表评论
]]>
实战Struts-Menu(2)http://www.aygfsteel.com/gdufo/archive/2008/08/05/220170.htmlgdufogdufoTue, 05 Aug 2008 06:56:00 GMThttp://www.aygfsteel.com/gdufo/archive/2008/08/05/220170.html
<?xml version="1.0" encoding="UTF-8" ?>

<MenuConfig>

  
<Displayers>
    
<Displayer   name="DropDown"
                 type
="net.sf.navigator.displayer.DropDownMenuDisplayer"/>
    
<Displayer   name="Simple"
                 type
="net.sf.navigator.displayer.SimpleMenuDisplayer"/>
    
<Displayer   name="CoolMenu"
                 type
="net.sf.navigator.displayer.CoolMenuDisplayer"/>
    
<Displayer   name="CoolMenu4"
                 type
="net.sf.navigator.displayer.CoolMenuDisplayer4"/>
    
<Displayer   name="MenuForm"
                 type
="net.sf.navigator.example.PermissionsFormMenuDisplayer"/>
    
<Displayer   name="ListMenu"
                 type
="net.sf.navigator.displayer.ListMenuDisplayer"/>
    
<Displayer   name="TabbedMenu"
                 type
="net.sf.navigator.displayer.TabbedMenuDisplayer"/>
    
<Displayer   name="Velocity"
                 type
="net.sf.navigator.displayer.VelocityMenuDisplayer"/>
  
</Displayers>

  
<Menus>
    
<Menu  name="DoorSite"  title="DoorSite"  description="Some famous doorsite" width="50">
       
<Item   name="Yahoo"   title="Yahoo">
           
<Item   name="YahooIndex"   title="Yahoo Index"   location="http://www.yahoo.com.cn"/>
           
<Item   name="YahooMail"    title="Yahoo Mail"    location="http://cn.mail.yahoo.com"/>
       
</Item>
       
<Item    name="Sohu"  title="Sohu"   location="http://www.sohu.com"/>
       
<Item    name="Sina"  title="Sina"   location="http://www.sina.com.cn"/>
    
</Menu>
  
</Menus>

</MenuConfig>

5Q将W四步的CZE序中的struts-menu应用目录下的images、scripts、styles三个目录中的内容复制到web目录?

  6Q你的目录结构应该类似如下:

%PROJECT_HOME%\classes
    %PROJECT_HOME%\lib
    %PROJECT_HOME%\lib\antlr.jar
    %PROJECT_HOME%\lib\commons-beanutils.jar
    %PROJECT_HOME%\lib\commons-digester.jar
    %PROJECT_HOME%\lib\commons-fileupload.jar
    %PROJECT_HOME%\lib\commons-lang-
2.1.jar
    %PROJECT_HOME%\lib\commons-logging.jar
    %PROJECT_HOME%\lib\commons-validator.jar
    %PROJECT_HOME%\lib\jakarta-oro.jar
    %PROJECT_HOME%\lib\jstl-
1.0.6.jar
    %PROJECT_HOME%\lib\standard-
1.0.6.jar
    %PROJECT_HOME%\lib\struts.jar
    %PROJECT_HOME%\lib\struts-menu-
2.3.jar
    %PROJECT_HOME%\src
    %PROJECT_HOME%\src\log4j.properties
    %PROJECT_HOME%\src\application.properties
    %PROJECT_HOME%\src\application_zh_CN.properties
    %PROJECT_HOME%\web
 %PROJECT_HOME%\web\images\
 %PROJECT_HOME%\web\scripts\
 %PROJECT_HOME%\web\styles\
    %PROJECT_HOME%\web\WEB-INF
    %PROJECT_HOME%\web\WEB-INF\menu-config.xml
    %PROJECT_HOME%\web\WEB-INF\struts-bean.tld
    %PROJECT_HOME%\web\WEB-INF\struts-config.xml
    %PROJECT_HOME%\web\WEB-INF\struts-html.tld
    %PROJECT_HOME%\web\WEB-INF\struts-logic.tld
    %PROJECT_HOME%\web\WEB-INF\struts-menu.tld
    %PROJECT_HOME%\web\WEB-INF\struts-menu-el.tld
    %PROJECT_HOME%\web\WEB-INF\struts-nested.tld
    %PROJECT_HOME%\web\WEB-INF\struts-tiles.tld
    %PROJECT_HOME%\web\WEB-INF\web.xml

六、实战Struts-Menu
  1Q用配|文件实现静态菜?br />   新徏JSP文gweb/static-menu.jspQ内容如下:

<%@ page contentType="text/html; charset=GBK" %>
<%@ taglib uri="struts-menu" prefix="menu" %>

<menu:useMenuDisplayer name="ListMenu" 
    bundle
="org.apache.struts.action.MESSAGE">
    
<menu:displayMenu name="DoorSite"/>
</menu:useMenuDisplayer>

q行TomcatQ在IE地址栏输?a href="http://localhost:8080/mymenu/static-menu.jsp">http://localhost:8080/mymenu/static-menu.jsp查看

2Q实C文化
  > 在src\application_zh_CN.properties中增加下面的内容QUnicode可以通过JDK自带的native2ascii工具得到Q?br />
#门户|站
menu.DoorSite
=\u95e8\u6237\u7f51\u7ad9
#雅虎
menu.Yahoo
=\u96c5\u864e
#雅虎首页
menu.YahooIndex
=\u96c5\u864e\u9996\u9875
#雅虎邮g
menu.YahooMail
=\u96c5\u864e\u90ae\u4ef6
#搜狐
menu.Sohu
=\u641c\u72d0
#新浪
menu.Sina
=\u65b0\u6d6a
> 在src\application.properties中增加下面的内容Q?br />
#门户|站
menu.DoorSite
=DoorSite
#雅虎
menu.Yahoo
=Yahoo
#雅虎首页
menu.YahooIndex
=Yahoo Index
#雅虎邮g
menu.YahooMail
=Yahoo Mail
#搜狐
menu.Sohu
=Sohu
#新浪
menu.Sina
=Sina
> 修改menu-config.xml文g<Menus></Menus>部分Q?br />
<Menus>
    
<Menu  name="DoorSite"  title="menu.DoorSite"  description="Some famous doorsite" width="50">
       
<Item   name="Yahoo"   title="menu.Yahoo">
           
<Item   name="YahooIndex"   title="menu.YahooIndex"   location="http://www.yahoo.com.cn"/>
           
<Item   name="YahooMail"    title="menu.YahooMail"    location="http://cn.mail.yahoo.com"/>
       
</Item>
       
<Item    name="Sohu"  title="menu.Sohu"   location="http://www.sohu.com"/>
       
<Item    name="Sina"  title="menu.Sina"   location="http://www.sina.com.cn"/>
    
</Menu>
  
</Menus>
重vTomcatQ在IE地址栏输?a href="http://localhost:8080/mymenu/static-menu.jsp">http://localhost:8080/mymenu/static-menu.jsp查看

  3Q结合数据库实现动态菜?br />   > 新徏数据myexamplesQ?br /> CREATE DATABASE myexamples
  > 新徏数据库表menu_itemQ?br />

CREATE TABLE menu_item (
   id BIGINT not null
,
   parent_name VARCHAR(
30),
   name VARCHAR(
30),
   title VARCHAR(
30),
   titleCN VARCHAR(
30),
   description VARCHAR(
50),
   location VARCHAR(
255),
   target VARCHAR(
10),
   onclick VARCHAR(
100),
   onmouseover VARCHAR(
100),
   onmouseout VARCHAR(
100),
   image VARCHAR(
50),
   altImage VARCHAR(
30),
   tooltip VARCHAR(
100),
   roles VARCHAR(
100),
   page VARCHAR(
255),
   width VARCHAR(
5),
   height VARCHAR(
5),
   forward VARCHAR(
50),
   action VARCHAR(
50),
   primary key (id)
)


gdufo 2008-08-05 14:56 发表评论
]]>
实战Struts-Menu(1)http://www.aygfsteel.com/gdufo/archive/2008/08/05/220167.htmlgdufogdufoTue, 05 Aug 2008 06:52:00 GMThttp://www.aygfsteel.com/gdufo/archive/2008/08/05/220167.html2006-11-21 19:13
 一、简?br />   Struts-Menu是一l从ZXML的配|文件中生成多种样式的菜单的JSP TagsQƈ且可以结合API开发通过数据库生成的动态菜单。Struts-Menu支持国际化和多种权限控制?

二、运行环?br />   Windows 2000 Professional
  JDK 1.4.2_03
  Eclipse 3.1
  Tomcat 5.0.28
  Tomcat Plugin 3.1Beta
  Struts 1.2.7
  Commons-Lang 2.1
  Commons-Collections 3.1
  Struts-Menu 2.3
  MySQL 4.1.10a-nt

三、下载与安装
  1Q从http://java.sun.com下蝲J2SDKQ当?.4.xpd的最新版本ؓ1.4.2_08
  2Q从http://www.eclipse.org下蝲EclipseQ当前最新版本ؓ3.1正式?br />   3Q从http://jakarta.apache.org/tomcat下蝲TomcatQ当?.xpd的最新版本ؓ5.0.28
  4Q从http://www.sysdeo.com/eclipse/tomcatplugin下蝲Eclipse的Tomcat插gQ对应Eclipse3.1x的最新版本ؓ3.1Beta
  5Q从http://struts.apache.org下蝲StrutsQ当前最新版本ؓ1.2.7
  6Q从http://jakarta.apache.org/commons/下蝲Commons-LangQ当前最新版本ؓ2.1Q下载Commons-CollectionsQ当前最新版本ؓ3.1
  7Q从http://struts-menu.sourceforge.net下蝲Struts MenuQ当前最新版本ؓ2.3
  8Q从http://www.mysql.com下蝲MySQL数据库,4.xpd的最新版本是4.1.12a
  9QMySQL、JDK、Eclipse、Tomcat和TomcatPlugin的安装及配置请参考相兌?/p>

四、运行示例程?br />   1Q安装好Tomcat后,解压~struts-menu-2.3.zipQ将struts-menu.war释放到Tomcat安装目录下的webapps下,q行Tomcat
  2Q在地址栏输?a href="http://localhost:8080/struts-menu">http://localhost:8080/struts-menu

五、安装与配置
  1Q在Eclipse中新建Tomcat目QContext?mymenuQSubdirectory?web
  2Q在目目录下面新徏lib目录和web目录及WEB-INFQ在web/WEB-INF目录下新建web.xmlQ内容如下:


<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd"
>

<web-app>
  
<display-name>My Example Application -- Vinton Lee</display-name>
      
  
<!-- ============= The Struts ActionServlet Configuration ============= -->
  
<servlet>
    
<servlet-name>action</servlet-name>
    
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    
<init-param>
      
<param-name>config</param-name>
      
<param-value>/WEB-INF/struts-config.xml</param-value>
    
</init-param>
    
<load-on-startup>1</load-on-startup>
  
</servlet>
  
<!-- ================================================================== -->
    
  
<!-- ============= The Struts Action Servlet Mapping ================== -->
  
<servlet-mapping>
    
<servlet-name>action</servlet-name>
    
<url-pattern>*.do</url-pattern>
  
</servlet-mapping>
  
<!-- ================================================================== -->
  
  
<!-- The Welcome File List -->
  
<welcome-file-list>
    
<welcome-file>index.jsp</welcome-file>
  
</welcome-file-list>

  
<!-- =============== The Struts Taglib Definition ===================== -->
  
<taglib>
    
<taglib-uri>struts-bean</taglib-uri>
    
<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
  
</taglib>
  
<taglib>
    
<taglib-uri>struts-html</taglib-uri>
    
<taglib-location>/WEB-INF/struts-html.tld</taglib-location>
  
</taglib>
  
<taglib>
    
<taglib-uri>struts-logic</taglib-uri>
    
<taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
  
</taglib>
  
<taglib>
    
<taglib-uri>struts-nested</taglib-uri>
    
<taglib-location>/WEB-INF/struts-nested.tld</taglib-location>
  
</taglib>
  
<taglib>
    
<taglib-uri>struts-tiles</taglib-uri>
    
<taglib-location>/WEB-INF/struts-tiles.tld</taglib-location>
  
</taglib>
  
<!-- ================================================================== -->
  
  
<!-- ============= The Struts-Menu Taglib Definition ================== -->
  
<taglib>
    
<taglib-uri>struts-menu</taglib-uri>
    
<taglib-location>/WEB-INF/struts-menu.tld</taglib-location>
  
</taglib>
  
<!-- ================================================================== -->
</web-app>

3Q解压羃struts-1.2.7.zipQ将压羃包中的lib目录下所有的8个jar释放到lib目录中,?个tld文g释放到web\WEB-INF目录中,在web\WEB-INF目录中新建struts-config.xmlQ内容如下:

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
          "http://struts.apache.org/dtds/struts-config_1_2.dtd"
>

<struts-config>

    
<!-- ========== Data Source Configuration =============================== -->
    
<data-sources />

    
<!-- ========== Form Bean Definitions =================================== -->
    
<form-beans />

    
<!-- ========== Global Exception Definitions ============================ -->
    
<global-exceptions />

    
<!-- ========== Global Forward Definitions ============================== -->
    
<global-forwards />

    
<!-- ========== Action Mapping Definitions ============================== -->
    
<action-mappings />

    
<!-- ========== Controller Configuration ================================ -->

    
<!-- ========== Message Resources Definitions =========================== -->
    
<message-resources parameter="application" />

    
<!-- ========== Plug Ins Configuration ================================== -->
    
<plug-in className="net.sf.navigator.menu.MenuPlugIn">
      
<set-property property="menuConfig" value="/WEB-INF/menu-config.xml"/>
    
</plug-in>

</struts-config>


gdufo 2008-08-05 14:52 发表评论
]]>
struts2 配置(struts.properties,strtus.xml)http://www.aygfsteel.com/gdufo/archive/2008/08/04/219909.htmlgdufogdufoMon, 04 Aug 2008 06:03:00 GMThttp://www.aygfsteel.com/gdufo/archive/2008/08/04/219909.html1.导入STRUTS2-core-2.0.X.jar,xwork-2.0.X.jar,ognl-2.6.x.jar
2.配置web.xml文g
加入org.apache.struts2.dispatcher.FilterDispatcherqo器的配置

<filter>
  
<filter-name>struts2</filter-name>
   
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>

<filter-mapping>
  
<filter-name>struts2</filter-name>
  
<url-pattern>/*</url-pattern>
</filter-mapping>

FilterDispatcher是STRUTS2核心控制器。负责拦截所有的用户h?/span>

用户h的到达时QFilterqo用户h。如果用戯求以actionl尾Q请求将被{入struts2框架处理?br />

<filter>可以加入以下参数
  
<init-param>
    
<param-name>config</param-name>
      
<param-value>以逗号隔开的多个struts配置文g的名,没有XML后缀</param-value>

  
</init-param>

  
<init-param>
     
<param-name>actionPackages</param-name>
      
<param-value>
org.apache.struts2.showcase.person包空间名Q多个用逗号隔开
</param-value>
</init-param>

<init-param>

         
<param-name>configProviders</param-name>

<param-value>

一个或多个实现ConfigurationProvider接口的配|提供类的类全名Q多个类用逗号隔开

</param-value>

</init-param>

 

3.在classes下加入struts.xml文g

Struts.xml文g用来配置action,拦截器等?/span>

 

<?xml version=”1.0” encoding=”GBK”?>

<!—DTD信息-->

<!DOCTYPE struts PUBLIC
“-//Apache Software Foundation//DTD Struts Configuration 2.0//EN”
“http://struts.apache.org/dtds/struts-2.0.dtd”
>
<struts>
<package name=”packagename” extends=”struts-default”>
<action name=”Login” class=”lee.LoginAction”>
<result name=”input”>login.jsp</result>
</action>
</package>
</struts>

i.Struts-default.xml配置文g位于struts-core-2.0.x.jar包中。是struts2最核心的配|文件?/span>

ii.从中可以看到整个的struts的核心功能的全貌.

iii.Struts可以在result元素中指定相应的type属?默认jsp).从而支持其他的视图技术?/span>

v.包可以承其他的包。包可以定义命名I间Q用来区别其他配|文件中的相同的包名?/span>

vi.包可以定义成abstract=true q样包就只能被承,不能被框架直接实例化?/span>

vii.struts可以一个struts.xml文g分解成多个配|文Ӟ然后在struts.xml文g中包含其他配|文件?lt;struts><include file=”struts-partOne.xml”/></struts>

注意Q也可以在web.xml中配|filter时加入config参数来加载多个配|文件?/span>

 

3Qstruts.properties配置文g

该文件定义了struts2框架的大量属性。只要将该文件放在web应用的CLASSPATH下,struts2框架׃自动加蝲?/span>

stuts.locale

指定Web应用的默认Locale

struts.i18n.encoding

指定应用的默认编码相当于调用HttpServletRequest的setCharacterEncodingҎ?/span>

struts.custom.i18n.resources

指定struts应用所需要的国际化资源文件的名称Qmessage_zh_cn.properties只需要指定名为messageQ?/span>

struts.mutipart.parser

该属性处理mutipart/form-data的MIMEcdh的框Ӟcos|pell|jakartaQ默认是jakarta(common-fileupload)

struts.multipart.saveDir

指定上传文g的时保存\径,默认是javax.servlet.context.tempdir;

struts.multipart.maxSize

指定文g上传中整个请求内容允许的最大字节数?/span>

struts.action.extension

指定Struts处理h后缀Q默认是action(login.action)

struts.serve.static.browserCache

指定览器是否缓存静态内?/span>

struts.enable.SlashesInActionNames

该属性设|struts2是否允许在Action名中使用斜线Q该属性的默认值是false?/span>

struts.devMode

讄struts2是否使用开发模式(true|falseQ?/span>

struts.dispatcher.parametersWorkaround

对于不支持HttpServlertRequest调用getParameterMap()Ҏ的服务器Q可以设|该属性gؓtrue

来解册问题。不支持getParameterMap()Ҏ的服务器Qweblogic,orion,oc4j

 struts.i18n.reload

讄是否每次HTTPh到达Ӟpȝ都重新加载资源文件。默认false

struts.ui.theme

讄视图标签的默认主题。默认是xhtml

struts.ui.templateDir

讄视图主题所需模板文g的位|,默认是template,默认加蝲template路径下的模板文g?/span>

struts.ui.templateSuffix

指定模板文g的后~Qftl|vm|jspQ?/span>

struts.configuration.xml.reload

 讄当struts.xml文g改变后,pȝ是否自动重新加蝲?/span>

struts.configuration.files

指定默认加蝲的配|文Ӟ默认值是Qstruts-default.xml,struts-plugin.xml,struts.xml

struts.objectFactory

指定struts2默认的ObjectFactoryBean,该属性默认是spring

struts.objectFactory.spring.autoWire

 指定Spring框架自动装配模式Q默认是name.x据Bean的name属性自动装配?/span>

struts.objectFactory.spring.userClassCache

 指定spring框架是否~存Bean实例。默认是true

struts.objectTypeDeterminer (tiger|notiger)


 



gdufo 2008-08-04 14:03 发表评论
]]>
Struts2 中文计划 译http://www.aygfsteel.com/gdufo/archive/2008/07/02/212179.htmlgdufogdufoWed, 02 Jul 2008 10:06:00 GMThttp://www.aygfsteel.com/gdufo/archive/2008/07/02/212179.html阅读全文

gdufo 2008-07-02 18:06 发表评论
]]>
Struts2与Velocity模板http://www.aygfsteel.com/gdufo/archive/2008/06/29/211517.htmlgdufogdufoSun, 29 Jun 2008 11:34:00 GMThttp://www.aygfsteel.com/gdufo/archive/2008/06/29/211517.htmlhttp://www.aygfsteel.com/gdufo/comments/211517.htmlhttp://www.aygfsteel.com/gdufo/archive/2008/06/29/211517.html#Feedback2http://www.aygfsteel.com/gdufo/comments/commentRss/211517.htmlhttp://www.aygfsteel.com/gdufo/services/trackbacks/211517.htmlVelocity是一U基?/span>JAVA的模板引擎,开发h员用简单的模板语言可以快速开发显C层Q它使得昄层与E序代码分离Q在早期?/span>Webwork版本中,所?/span>UI标签均?/span>Velocity模板引擎生成Q可以在Struts-core-2.0.8.jar中找?/span>template文g夹,其中?/span>archive文g夹下存放着原有?/span>vl文gQ?/span>

?/span>Struts2中查?/span>vm文g的顺序先查找Web应用E序Q再查找c\径。如果你需要?/span>vm作ؓ昄层,只需要在配置文g中指?/span>result?/span>type属性ؓvelocityQ然后将<param>?/span>location属性指定到一个以vml尾的资源上可以了Q?/span>

1.Struts2中的Velocity中文q的处理方式:

因ؓ?/span>Velocity-1.4.jar中的org.apache.velocity.runtime.defaults中定义的velocity.properties中定义的input.encoding=ISO8859-1Q?/span>output.encoding=ISO8859-1Q通常最好在VM文g中?/span>%{getText(‘’)}调用国际化资源文件的内容׃会生ؕ码?/span>

2.Velocity?/span>vm文g必须要经q?/span>Action才可以访问,以便被程序解析,不可以直接访?/span>vm文g?/span>

3.?/span>vm文g中?/span>Struts2的标{֏需要在原有标签前加#s可以了Q参C间?/span>””分隔Q?/span>

(1.)例如下面是一个表单的定义Q?/span>

#sform(“action=Student” namespace=”/ilkj/student”)

       #stextfield(“label=%{getText(‘student.label.name’)}” “name=student.name”)

       #spassword(“label=%{getText(‘student.label.password’)} ” name=student.age”)

       #ssubmit(“value=getText(‘globale.label.submit’)”)

#end

(2.)下面是取?/span>session中的一个参数的?/span>

#sproperty(“value=#session.information” “default=noValue”)

(3.)下面是访?/span>Action中的属?/span>

${student.name}Q当然你也可以简单写?/span>$student.name的Ş式?/span>

4.Velocity的内建变量:

stack---ValueStackQ可以?/span>${stack.findString(‘OGNL表达?/span>’)}取?/span>

action---最q执行的ActionQ例?/span>${action.getStudent().getName()}或者也可以直接?/span>${action.student.name}

response---HttpServletRequest

request---HttpServletResponse

session---HttpSession

application---ServletContext

base---生成应用的上下文Q相当与request.getContextPath()

5.注释语法

(1.)单行注释Q?/span>##

(2.)多行注释Q?/span>#* ... ... *#

6.暂停执行

#stop---停止执行后面的模板内?/span>

7.转义字符

Velocity使用 \ 转义字符Q例?/span>email被定义ؓandrew830314@163.comQ?/span>#set($email=’andrew830314@163.com’)Q,你还惌?/span>$email而不?/span>Velocity解析Q那么你可以使用 \$email?/span>

8.引入其他文g

#include(“”)Q如果是JSP或?/span>vm文g会昄内容Q其他文本文件显C文本,二进制会昄qQ引入多个文件?/span> , 间隔Q?/span>#parse(“”)引入一个本地的vm文gQ与#include(“”)不同Q?/span>#parse(“”)只能引入一个文Ӟq且#parse(“”)可以讉K父模杉K的变量?/span>

9.模板代码复用

#macro(代码D名U?/span> $参数1 ... ...)

       ... ...

#end

只要使用#代码D名U?/span>($参数1 ... ...)可以用这D代码,当然你也可以不用Q何参?/span>

10.判断语句

#if(逻辑表达?/span>)

注意Q在Velocity中?/span>==判断两个变量是否相等Q而不是?/span>equals(“”)Ҏ?/span>

#else

#end

从上面我们还可以ȝ出,Velocity模板引擎使用#表示一U命令,例如#set是给某个变量讄|使用$引用变量Q?/span>()表示参数Q?/span>{}表示作用范围?/span>

另外需要注意的时候,Velocity只会按照gettXXX()解析变脸变量Q例?/span>student.name实际上找到的student.getName()ҎQ你可以试着?/span>Action写一个变量而不使用getXXX()ҎQ看看会不会?/span>vm中取到|{案是变量会被原栯出?/span>

Velocity使用的都是对象,即你定?/span>#set ($count=1)也会被包装成Integer使用?/span>

另外Q修?/span>vm文g需要重新启动服务器Q如果在开发阶D,我们可以讄struts.properties中的struts.devMode=true避免每次重新启动服务器?/span>

最后我们思考一下,如果货币$2.95会被Velocity引擎直接输出Q还是去查找2.95q个变量Q如果你在思考这个问题,说明你的JAVA基础不过兛_Q因?/span>JAVA中的变量不能以数字开头的哦!因此你不必担心货?/span>$2.95会被当作变量解析Q另外,如果Velocity引擎未找到变量也会原栯出,例如${student.name}如果未找C直接原样输出Q这也是Z么我们直接访?/span>JSP的时候会看到大量?/span>${}被原栯出。如果变量不存在,你想让它不输?可以q样?!{}

gdufo 2008-06-29 19:34 发表评论
]]>
վ֩ģ壺 Ӫɽ| | | ְ| ƽ| ɳƺ| | | | Դ| | | ƽ| | ˮ| | ͤ| ƽ½| | | ˮ| | | Ԫ| ˻| ʡ| ˫| | û| | | | | | | ԭ| ɳ| | ɰ| ǹ| ͡|