<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    鐵手劍譜

    上善若水
    數據加載中……
    Struts秘籍之第1段:第2.3式:在JSP中使用常數

    第2.3式. 在JSP中使用常數

    問題

    不通過scriptlets, 你想要在JSP中使用Java類中定義的應用常數public static字段。

    動作要領

    使用Jakarta Taglibs的unstandard標簽庫提供的bind標簽來創建包含常數字段的JSTL變量:

    <%@ taglib uri="http://jakarta.apache.org/taglibs/unstandard-1.0" prefix="un" %>
    <un:bind var="constantValue"
            type
    ="com.foo.MyClass"
           field
    ="SOME_CONSTANT"/>
    <bean:write name="constantValue"/>


    <%@ taglib uri="http://jakarta.apache.org/taglibs/unstandard-1.0" prefix="un" %><un:bind var="constantValue"type="com.foo.MyClass"field="SOME_CONSTANT"/><bean:write name="constantValue"/>

     

    動作變化

    大多數團隊都費力地通過使用publicstatic字段(常數)來避免在Java類中使用硬編碼的字符串。不幸的是,不過是 Struts 還是 JSP都沒有提供相應的手段來在JSP中不借助scriptlet 而使用這些常數,如:

    <%= com.foo.MyClass.SOME_CONSTANT %>


    但是有許多開發團隊禁止,或者至少不贊成在JSP中使用scriptlet 。

    Scriptlets (<% . . . %>) 和運行時表達式(<%= . . . %>) 都直接在JSP中置入Java代碼。它們不是與生俱來的惡人,但是它們因為使得你的頁面中混合HTML,JSP和Java代碼變得紛繁復雜,從而使開發效率大大降低。需要找到一種方法來避免使用scriptlets你將發現JSTL的引入就是為了解決這個可怕的scriptlet的問題。

    這種方法通過使用定制JSP標簽來提供一種方式來解決這個窘境,即使用un:bind標簽。該標簽是unstandard標簽庫的一部分,unstandard標簽庫則是Jakarta Taglibs中的一個組件。unstandard標簽庫包含已經用于或者正在考慮用于標準標簽庫的標簽。標準標簽庫是JSTL 規范的Jakarta Taglibs 的實現。

    unstandard標簽庫可以從下面的地方下載:http://cvs.apache.org/builds/jakarta-taglibs-sandbox/nightly/projects/unstandard/. 為了使用這個庫,你需要將unstandard.jar和unstandard.tld文件拷貝到應用的WEB-INF/lib目錄。

    un:bind標簽提供了一種方法來創建JSP頁面上下文變量,它一般引用java類中的一個字段。字段可以是實例變量或者靜態變量。良好設計的Java 類一般都不會將實例變量暴露為公共字段,而大多數都將靜態變量暴露為公共字段。

    你可以創建一個使用Struts提供的靜態字段的簡單JSP頁面來看看這種方法是否可行。從Struts 1.1開始, Struts 所用的常數都放在org.apache.struts.Globals類中。這些常數的值指定了各種存儲在請求、會話、應用上下文中的Struts相關實體的關鍵字值。Example 2-5 中的JSP頁面使用了un:bind標簽來顯示這些值:

    Example 2-5. 使用bind 標簽來訪問Struts全局常數

     

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@ taglib uri="http://jakarta.apache.org/taglibs/unstandard-1.0" prefix="un" %>
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
    <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
    <html>
    <head>
      
    <title>Struts Cookbook - Chapter 4 : Using Bind</title>
    </head>
    <body>
      
    <un:bind var="servletKey"
              type
    ="org.apache.struts.Globals"
             field
    ="SERVLET_KEY"/>
      
    <p>
      Field name: SERVLET_KEY
    <br />
      Field value: 
    <bean:write name="servletKey"/>< br />
      Attribute Value: 
    <c:out value="${applicationScope[servletKey]}"/>< br />
      
    </p>
    </body>
    </html>

    此頁面使用un:bind來從Struts Globals類中獲取SERVLET_KEY字段的值。SERVLET_KEY字段的值被用于servlet 上下文屬性關鍵字,在其下存儲了為Struts controller servlet 定義的映射(如. /action/*或*.do)。

    在你需要以一種特殊的方式訪問常數時,un:bind標簽是一個不錯的選擇。但是它還是有些麻煩,因為你需要首先使用un:bind標簽來創建變量,然后使用bean:write或者c:out標簽來顯示值。假定JSP顯示Globals類中的所有常數,而這足有17 個之多。許多應用嚴重依賴于常數并且可能有很多類,每一個類都包含很多字段。對每一個字段都使用一個單獨的標簽是多么的麻煩。

    你可以使用一種替代方法,雖然需要一些額外的Java 代碼,它可以將常數綁定到一個JavaBean 的一個Map屬性之中。你可以將這個bean 存儲在servlet 上下文中。然后就可以通過bean:write和c:out標簽直接訪問這些值了。Example 2-6中的Constants類定義了一個包含Struts Globals類中的常數的map屬性的JavaBean 。Example 2-7 中的ConstantsPlugin則將Constants的一個實例載入到servlet context中。

    Example 2-6. 包含Struts全局常數的JavaBean

     

    package com.oreilly.strutsckbk.ch04;

    import java.util.HashMap;
    import java.util.Map;

    import org.apache.struts.Globals;

    public class Constants {
        
    private Map strutsGlobals;
        
        
    public Constants( ) {
            strutsGlobals 
    = new HashMap( );
            strutsGlobals.put( 
    "ACTION_SERVLET_KEY"
                               Globals.ACTION_SERVLET_KEY );
            strutsGlobals.put( 
    "SERVLET_KEY", Globals.SERVLET_KEY );
        }

        
        
    public Map getStrutsGlobals( ) {
            
    return strutsGlobals;
        }

        
    public void setStrutsGlobals(Map strutsGlobals) {
            
    this.strutsGlobals = strutsGlobals;
        }

    }

     

    Example 2-7. 將常數載入到servlet context中的插件

     

    package com.oreilly.strutsckbk.ch04;

    import javax.servlet.ServletException;

    import org.apache.struts.action.ActionServlet;
    import org.apache.struts.action.PlugIn;
    import org.apache.struts.config.ModuleConfig;

    public class ConstantsPlugin implements PlugIn {
        
    public void destroy( ) {
        }

        
    public void init(ActionServlet servlet, ModuleConfig module)
                throws ServletException 
    {
            Constants constants 
    = new Constants( );
            servlet.getServletContext( ).setAttribute(
    "Constants", constants);
        }

    }

    Example 2-8 (globals_test.jsp) 則展示了一個訪問和顯示ConstantsPlugin載入的常數的JSP頁面。第一個常數使用Struts bean:write標簽,第二個則使用JSTL c:out標簽。

    Example 2-8. 使用Struts 和JSTL訪問常數

     

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
    <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
    <html>
    <head>
      
    <title>Struts Cookbook - Chapter 4 : Accessing Constants</title>
    </head>
    <body>
      
    <p>
      Field name: ACTION_SERVLET_KEY
    <br />
      Field value: 
    <bean:write name="Constants" 
                           property
    ="strutsGlobals(ACTION_SERVLET_KEY)"/><br />
      
    </p>
      
    <p>
      Field name: SERVLET_KEY
    <br />
      Field value: 
    <c:out value="${Constants.strutsGlobals.SERVLET_KEY}"/><br />
      
    </p>
    </body>
    </html>

    這種方式的最大缺點是你必須手動創建持有常數值的map。如果類中添加了新的常數,你必須修改Constants類的源代碼以便能夠獲取它。

    相關招式

    關于Jakarta Taglibs 項目的詳細信息可以訪問http://jakarta.apache.org/taglibs.

    第5.4式提供了如何從Struts 和JSTL訪問map的方法。

    Struts plug-ins 我們在第2.1式討論過。

    Kris Schneider 建立了一個類似于Example 2-6中的Constants類,使用反射來訪問特定類的公開靜態字段。源代碼可以從歸檔的struts-user mailing list 中找到:http://marc.theaimsgroup.com/?l=struts-user&m=108929374300664&w=2.

     

    posted on 2005-05-12 11:01 鐵手 閱讀(2664) 評論(1)  編輯  收藏 所屬分類: JavaStruts系列

    評論

    # Struts 秘籍(CookBook)[TrackBack] 2005-11-12 18:29 阿泠

    本系列源改編自O'Reily的Strus Cookbook
    [引用提示]阿泠引用了該文章, 地址: http://blog.donews.com/inclear/archive/2005/11/12/624363.aspx
      回復  更多評論    
    主站蜘蛛池模板: 久久久久久毛片免费播放| 在线观看免费黄色网址| 真人做A免费观看| 亚洲综合激情九月婷婷| 国产成人精品免费视频大全麻豆| 亚洲AV无码专区国产乱码4SE | 亚洲精品无码日韩国产不卡av| 成年女人毛片免费播放视频m| 亚洲AV成人影视在线观看| 成人性生活免费视频| 亚洲丰满熟女一区二区哦| 国产福利在线免费| 亚洲 暴爽 AV人人爽日日碰| 日韩毛片无码永久免费看| 老外毛片免费视频播放| AV在线亚洲男人的天堂 | 99久久人妻精品免费一区| 亚洲精品国产免费| 免费福利网站在线观看| 精品亚洲456在线播放| 国产大片91精品免费观看男同| 高清免费久久午夜精品| 亚洲国产精品无码专区在线观看| 无码精品一区二区三区免费视频 | 亚洲A∨无码无在线观看| 18观看免费永久视频| 亚洲精品无播放器在线播放| 亚洲 自拍 另类小说综合图区 | 无套内射无矿码免费看黄| 亚洲av永久无码精品秋霞电影影院 | 亚洲JIZZJIZZ中国少妇中文| 免费人成大片在线观看播放电影| 国产精品免费_区二区三区观看| 牛牛在线精品免费视频观看| 国产成人亚洲精品青草天美| 30岁的女人韩剧免费观看| 综合偷自拍亚洲乱中文字幕| 亚洲午夜福利717| 最近免费中文字幕大全视频| 一级毛片不卡免费看老司机| 亚洲高清视频在线观看|