|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
没有那个大公司会傻了吧唧用.net开发大型项目,开发了,那等于自己一半的生命线被微软握着呢。而.net不行,限制在window系统,又是捆绑,鄙视微软之!js|历程|网页格局标志库:格局举措
假如你已利用了Java的DateFormat和NumberFormat类,鄙人面的标志中利用的办法应当看起来眼生,由于JSTL格局化举措是在这些类之上创建的。这些Java类广泛供应一个format()函数,它将一个Java范例转化为一个格局化的String和创立对应于该String的Java对象。
fmt:formatNumber举措有一个value属性和一个pattern属性。value属性是一个与我们吹降钠渌value属性相似的EL表达式大概变量。pattern属性与在NumberFormat类中界说的形式一样。以下举措发送一个格局化的String到JSP页的输入上:
- <fmt:formatNumbervalue="1000.001"pattern="#,#00.0#"/>
复制代码
在这个fmt:formatNumber举措里,我们利用了type属性来指定:格局化我们必要格局化的值为一个泉币值。我们保留格局化的了局在一个变量名为dollars中。在一个美国的locale类中,上面的程序天生一个字符串$3456.79(注重,它将利用的泉币值四舍五进了):
- <fmt:formatNumbervalue="3456.789"type="currency"var="dollars"/>
复制代码
用于下面的type属性的大概值包含currency、number、和percent。
在例中,我们利用了另外一种办法――利用了一个包含在value属性中的一个格局化的域(currency,每type属性)的一个文本字符串。而且剖析它来猎取一个数字。了局贮存在由var属性指定的一个变量内。只管这个属性是可选的,仍是会常常利用它。别的,剖析的值送到页输入上:
- <fmt:parseNumbervalue="${currencyInput}"type="currency"var="parsedNumber"/>fmt:formatDate举措有一个value属性、一个format属性、一个指向处置格局化的格局类的属性(典范的,如java.util.Date):<jsp:useBeanid="now"class="java.util.Date"/><fmt:formatDatevalue="${now}"timeStyle="long"dateStyle="long"/>
复制代码
像数字格局化一样,JSTL页供应一个机制来剖析一个代表日期的、进进Date对象的字符串:
- <fmt:parseDatevalue="${dateInput}"pattern="MMdd,YYYY"/>
复制代码
检察java.util.DateFormat类,懂得怎样处置格局化和形式的更多具体的材料。
格局标志库:国际化举措
Java当地化的一个关头点是ResourceBundle类。JSTL举措同意你用这个类复杂的事情。这个例子利用了fmt:bundle举措来失掉与以后Locale和fmt:message举措对应的一个ResourceBundle举措,从而检察该资本包中的当地化的字符串:
- <fmt:bundlebasename="myBundle"><%--UsevaluesinmyBundle--%><fmt:messagekey="Introduction"><fmt:paramvalue="${loginName}"/><fmt:paramvalue="${loginCount}"/></fmt:message><fmt:formatDatevalue="${now}"var="parsedDate"/></fmt:bundle>
复制代码
常常,fmt:message举措复杂的检察了对应于一个关头词的字符串。在下面的例子中,在ResourceBundle中的字符串包括了代替两个值的占位符。这些值在fmt:param举措中界说过,这就像JavaMessageFormat类利用的办法。
有一些相似的举措可指定一个时区,时区可使用到在标志的体上钩算的任何事上:
- <fmt:timeZonevalue="someTimeZone"><!--actionsinthiscontextwillbeevaluatedusingsomeTimeZone--></fmt:timeZone>
复制代码
上述的fmt:bundle和fmt:timeZone举措有分离对应的fmt:setBundle和fmt:setTimeZone的举措。这些举措增加了可选的scope属性;因而,你可使用这些举措在任多么同于使用局限的局限内设定一个资本绑缚大概一个时区。
假如你用非欧洲的locale类事情的话,你大概得忧虑编码的成绩,JSTL撑持用fmt:requestEncoding举措编码。
SQL标志库
JSTL同意简单的数据库的集成。可是,值得注重的是:沙箱以外的JSTL的实行有一些限定。次要的成绩与毗连池有关。创建并保护到数据库的毗连是很损耗资本的。JSTLSQL举措使得很多数据库毗连创建起来,一般的,每一个用户最少有一个。因而,JSTLSQL标志关于原型开辟的或低容量的、基于Web的使用程序意义严重。可是它不合适于年夜范围的使用程序。一个可缩放的产物使用程序通常为在一个页面内处置数据库会见如埋没数据库会见和处置像毗连池之类的细节。可是,仍是无方法同意你完成毗连池和用一点自界说码来利用JSTLSQL举措
我们看一些复杂的例子。这些例子利用来自SQL库的JSTL标志。假如你熟习SQL基本的话,你应当可以改编这些例子用在你的使用程序上。
鄙人面的程序片段中,我们创建了一条到一个数据库的毗连,选择一组婚配一个定单ID的定单项目,而且在一个表格中显现item属性:
- <sql:setDataSourcedriver="com.cheapDrivers.jdbcDriver"url="jdbc:cheapDrivers:."user="guest"password="password"var="dataSource"/><sql:queryvar="orderItems"dataSource="${dataSource}">SELECT*FROMitemsWHEREorder_id=<coutvalue="${orderID}"/>ORDERBYprice</sql:query><table><c:forEachvar="row"items="${orderItems.rows}"><tr><td><c:outvalue="${row.itemName}"/></td><td><c:outvalue="${row.price}"/></td><td><c:outvalue="${row.weight}"/></td></tr></c:forEach></table>
复制代码
鄙人一个例子中,我会申明JSTL是怎样撑持数据库事件的,在数据库中,很多包括对表格多个修改的操纵必需是对一切的,大概甚么也不做:假如呈现一个成绩时,修改必需为空操纵。鄙人面例子中,sql:update举措包括在一个sql:transaction举措内,假如在事件处置过程当中,存在任何SQL毛病的话,在事件局限内实行的一切操纵都得重来。
sql:update举措的定名有一点误导:除SQLUPDATE外,sql:update也撑持INSERT和DELETE,乃至是SQLCREATE。实践上,它撑持不发生了局的任何一条SQL操纵。鄙人面的例子中,sql:update经由过程拔出变量值到一个PreparedStatement中来实行一个UPDATE举措。在这个代码片段中,我们在两个账户之间传送钱(必要事后包装在一个事件中的某些工具的一个典范的例子):
- <sql:transactiondataSource="${dataSource}"><sql:update>UPDATEaccountSETaccount_balance=account_balance-?WHEREaccountNo=?<sql:paramvalue="${transferAmount}"/><sql:paramvalue="${sourceAccount}"/></sql:update><sql:update>UPDATEaccountSETaccount_balance=account_balance+?WHEREaccountNo=?<sql:paramvalue="${transferAmount}"/><sql:paramvalue="${destAccount}"/></sql:update></sql:transaction>
复制代码
XML标志库
利用尺度的XML标志库,你所能做的完全的处置,出格是可扩大性单一言语变更申明(XSLT)的处置,关于另外一篇文章来讲是一个很好的主题。上面我会涵盖充足的让你入手下手的常识。
在JSTL的XML撑持遵守XPath标准。XPath的主要功效之一是为会见XML出名的分层的信息供应一个明晰的语法。大概看到每件是怎样事情的最简单的办法就是看看我们怎样利用来自于一个实在JSTL页的一个片段里的标志:
- !--FindandparseourXMLdocument(somewhereontheWWW)--><c:importurl="http://www.cheapstuff.com/orderStatus?id=2435"var="xml"/><x:parsexml="${xml}"var="doc"/><!--accessXMLdataviaXPathexpressions--><x:outselect="$doc/name"/><x:outselect="$doc/shippingAddress"/><x:outselect="$doc/deliveryDate"/><!--Setascopedvariable--><x:setvar="custName"scope="request"select="$doc/name"/>
复制代码
在下面的输出息争析举措中,我们装载息争析了一个指定的XML文档到一个变量doc里。在下面的每一个x:out举措中,我们利用了一个XPath表达式会见懂得析的XML文档的元素,而且发送了局到JSP页输入中。
下面的设置表达式盘算了一个XPath表达式而且将了局输出到一个限制局限的变量里(在上述例子中,它指在一个哀求局限内)。
x:out和x:set举措能够输入一个JspTagException。假如他们没有乐成的话(极有大概由于XPath表达式指向其实不存在的标志),你的页,像在一切其他情形下一样,应当智能的处置这些非常(要末经由过程传统的JSPerrorPage指令,要末利用JSTL的c:catch举措),
JSTL简单处置XSLT转换。鄙人面的树模页中,我们利用来自XML标志库中的x:transform举措,用一个XSLTstylesheet创立一个来自于XML源文档的一个格局化的页。x:transform举措最主要的属性是XML和XSLT属性,鄙人面的例子中,我们设置了一个来自于我们在统一页初始化的变量的xslt属性;我们也在举措的体中设置了XML属性。该举措默许为x:transform举措。
默许的,转换的了局送到页输入上;你也能够保留了局到一个带x:var属性的变量内:
- <%@tagliburi="http://java.sun.com/jstl/core"prefix="c"%><%@tagliburi="http://java.sun.com/jstl/xml"prefix="x"%><c:setvar="xsltSource"><?xmlversion="1.0"?><xsl:stylesheetxmlns:xsl="http://www.w3.org/1999/XSL/Transform"version="1.0"><xsl:templatematch="/"><xsl:apply-templates/></xsl:template><xsl:templatematch="music"><html><head></head><bodymarginheight="0"marginwidth="0"topmargin="0"leftmargin="0"><tablecellpadding="0"cellspacing="0"border="1"bgcolor="#ffffff"><tr><td><STRONG>Artist</STRONG></td><td><STRONG>Album</STRONG></td><td><STRONG>Year</STRONG></td><td><STRONG>Genre</STRONG></td></tr><!---Setupforlooptocollectalltheartistinformation//--><!--<xsl:for-eachselect="./*[name()=artists]">--><xsl:for-eachselect="artists"><tr><td><xsl:value-ofselect="artist"/></td><td><xsl:value-ofselect="album"/></td><td><xsl:value-ofselect="year"/></td><td><xsl:value-ofselect="genre"/></td></tr></xsl:for-each></table></body></html></xsl:template></xsl:stylesheet></c:set><x:transformxslt="${xsltSource}"><music><artists><artist>JonnyB</artist><album>FeedbackandDistortion</album><year>2001</year><genre>Rock</genre></artists><artists><artist>HarmonysNieces</artist><album>SappyPopBallads</album><year>2002</year><genre>Pop</genre></artists></music></x:transform>
复制代码
你也能利用c:import举措再界说一个分外的源文档和stylesheet,就仿佛在这个树模的代码片段展现的一样::
- <c:importvar="${xmlSource}"url="${someDocumentURL}"/><c:importvar="${xsltSource}"url="${anotherDocumentURL}"/><x:transformxml="${xmlSource}"xslt="${xsltSource}">
复制代码
停止语
至此,你应当对JSTL、它的四种尺度标志库、和它怎样使网页开辟更加简单有了很好的了解。如今你入手下手写一些JSTL!
其实产生见解的过程就是训练自己发现问题,分析问题的能力。根据以上的认识我想谈下传统的学习与通过视频独立学习的优缺点: |
|