<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
      回復  更多評論    
    主站蜘蛛池模板: 免费无码又爽又刺激高潮 | 亚洲午夜av影院| 国产免费爽爽视频在线观看| 久久久亚洲欧洲日产国码二区| 精品无码免费专区毛片| 亚洲色偷偷色噜噜狠狠99| 亚洲伊人成无码综合网| 亚洲&#228;v永久无码精品天堂久久 | 国拍在线精品视频免费观看 | 亚洲成a人片77777老司机| 免费看的一级毛片| 成人永久免费福利视频网站| 99久久99这里只有免费的精品 | 亚洲综合无码精品一区二区三区| 国产精品永久免费10000| 中文字幕在线视频免费观看 | 亚洲中文字幕在线观看| 亚洲日韩精品一区二区三区| 无码国产精品一区二区免费| 免费无码AV片在线观看软件| 国产情侣久久久久aⅴ免费| 嫩草在线视频www免费观看| 男女猛烈激情xx00免费视频| 亚洲精品中文字幕乱码| 国产L精品国产亚洲区久久| 亚洲国产精品久久久天堂| 又爽又高潮的BB视频免费看| 麻豆一区二区免费播放网站| 免费网站看v片在线香蕉| 亚洲国产aⅴ综合网| 午夜色a大片在线观看免费| 91短视频免费在线观看| 久久不见久久见免费影院| 国产男女性潮高清免费网站| 免费无码精品黄AV电影| 免费观看国产精品| 国产一级一片免费播放i| 国产AV无码专区亚洲AV漫画 | 亚洲精品A在线观看| 四虎影视永久免费观看| 亚洲中文字幕日产乱码高清app|