JSP由淺入深(11)標記庫

來源:互聯網
上載者:User
js  JSP 1.1提出了一種擴充的JSP標誌的方法,這種方法命名為“標誌庫”。這些庫允許另外的一些類似於jsp:include 或者jsp:forward的標誌,但是它們不是以jsp:為首碼的並且還附件一些特性。

  為了介紹標誌庫,在本教程中我們使用Blazix標誌庫作為例子。這個標誌庫只能用在Blazix伺服器中,這個伺服器你可以免費下載。

每一個標誌庫都有它自己的標誌庫特殊的文檔。為了使用標誌庫,你可以使用"taglib" directive來指出標誌庫“description”處在什麼地方。對於Blazix標誌庫而言,directive如下:

<%@ taglib prefix="blx" uri="/blx.tld" %>

上面者句中“uri”就是指出了標誌庫描述所在的地方。標誌庫的首碼是不同的。這個指令的意思是說我們可以使用blx:來使用庫中的標誌。Blazix標誌庫提供了一個blx:getProperty標誌。這個標誌可以允許使用者編輯表單資料。現在,在GetName.jsp檔案中,我們增加一個jsp:useBean並且將表單放置在blx:getProperty中:

<%@ taglib prefix="blx" uri="/blx.tld" %>


<jsp:useBean id="user" class="UserData" scope="session"/>



<HTML>



<BODY>



<blx:getProperty name="user" property="*">



<FORM METHOD=POST ACTION="SaveName.jsp">



What's your name? <INPUT TYPE=TEXT NAME=username SIZE=20><BR>



What's your e-mail address? <INPUT TYPE=TEXT NAME=email SIZE=20><BR>



What's your age? <INPUT TYPE=TEXT NAME=age SIZE=4>



<P><INPUT TYPE=SUBMIT>



</FORM>



</blx:getProperty>



</BODY>



</HTML>

從上面的代碼中我們可以發現blx:getProperty不是以/>結尾的,而是用來結尾。這條語句將所有的表單輸入地區輸入到blx:getProperty中,這樣它們就可以被標誌庫正確地修改。

接著建立一個從GetName.jsp到NextPage.jsp的串連,你將發現bean的資料自動顯示在輸入地區中。所以現在使用者可以編輯資料了。

至此,我們還有一些問題還沒有澄清。首先,使用者不能清除名字地區;而且如果使用者在“age”地區鍵入一個不對的內容(不是一個效果的整型數值),Java異常錯誤就會發生。
  現在,我們將使用Blazix標誌庫中的其它標誌來解決這個問題。Blazie提供了一個blx:setProperty標誌來解決這個問題。Blx:setProperty允許我們定義一個異常錯誤處理方法。如果有異常錯誤發生,我們可以為使用者收集一個錯誤資訊並且繼續處理。
  下面是我們修改後的SaveName.jsp,它可以處理任何錯誤。它不僅可以顯示GetName.jsp並且在其上可以鍵入正確的資料,而且自動地串連到NextPage.jsp:

<%@ taglib prefix="blx" uri="/blx.tld" %>


<%!



boolean haveError;



StringBuffer errors;





public void errorHandler( String field,



String value,



Exception ex )



{



haveError = true;



if ( errors == null )



errors = new StringBuffer();



else



errors.append( "<P>" );



errors.append( "<P>Value for field \"" +



field + "\" is invalid." );



if ( ex instanceof java.lang.NumberFormatException )



errors.append( " The value must be a number." );



}



%>



<%



// Variables must be initialized outside declaration!



haveError = false;



errors = null;



%>



---------------



<BODY>



<jsp:useBean id="user" class="UserData" scope="session"/>



<blx:setProperty name="user"



property="*"



onError="errorHandler"/>



<%



if ( haveError ) {



out.println( errors.toString());



pageContext.include( "GetName.jsp" );



} else



pageContext.forward( "NextPage.jsp" );



%>



</BODY>



</HTML>



  這裡要注意haveError和errors必須每次都重新初始化,因為它們在聲明的外部被初始化。

  現在,如果一個錯誤發生在blx:setProperty處理的過程,我們就顯示這個錯誤並再次回到GetName.jsp以使使用者可以校正這個錯誤。如果沒有錯誤發生,我們就自動讓使用者串連到NextPage.jsp。
如果你細心點你還可以發現表單仍有一個問題,即“age”開始顯示空而不是0。這個問題我們可以通過增加“emptyInt=0”到blx:getProperty和blx:setProperty標誌中,這樣bean地區就被初始化為0了。如果鍵入的年齡不是一個有效數值,那麼我們就使用0來標誌Null 字元。

  另外一個小的問題是如果有錯誤出現並且我們舊書包含“GetName.jsp”的時候,就得到兩個"<HTML>"標誌。對於這個問題一個完美的解決方案是去掉out.println,並按如下傳遞錯誤:

<%

if ( haveError ) {

request.setAttribute( "errors",

errors.toString());

pageContext.forward( "GetName.jsp" );

} else

pageContext.forward( "NextPage.jsp" );

%>

  那麼我們可以在GetName.jsp執行“request.getAttribute”,並且如果返回數值為非空,就顯示錯誤。這個就留著作為本節教程的練習吧。

  最後,再說說本節的練習吧,首先剛才說的內容。還要閱讀標誌庫文檔中的SQL標誌,然後建立一個資料庫表格;再編寫一個JSP檔案,其上有一個 FORM以及表單上有一個選擇框;接著使用SQL標誌來根據資料庫表格製作選擇框

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.