亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 組件卷標.htm

?? 良葛格學習筆記,《jsf入門》簡體中文版,對學習JSF有幫助
?? HTM
字號:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>新建網頁 1</title>
</head>

<body>

<p>組件卷標</p>
<div id="PageContent">
	<table cellSpacing="0" cellPadding="0" width="100%" border="0" id="table3">
		<tr>
			<td class="pagebody" vAlign="top">
			<table style="CLEAR: both" cellSpacing="0" cellPadding="0" width="100%" border="0" id="table4">
				<tr>
					<td class="pagecontent" vAlign="top" width="100%">
					<div class="wiki-content">
						完成Component的自訂,接下來要設定一個自訂Tag與之對應,自訂Tag的目的,在于設定
						Component屬性,取得Componenty型態,取得Renderer型態值等;屬性的設定包括了設定靜態值、設定綁定值、設定驗證器等等。<p>
						  要自訂與Component對應的Tag,您可以繼承UIComponentTag,例如:</p>
						<div class="code" style="BORDER-TOP-STYLE: solid; BORDER-RIGHT-STYLE: solid; BORDER-LEFT-STYLE: solid; BORDER-BOTTOM-STYLE: solid">
							<div class="codeHeader" style="BORDER-BOTTOM-STYLE: solid">
								<b>TextWithCmdTag.java</b></div>
							<div class="codeContent">
								<pre class="code-java"><span class="code-keyword">package</span> onlyfun.caterpillar;

 <span class="code-keyword">import</span> javax.faces.application.Application;
 <span class="code-keyword">import</span> javax.faces.component.UIComponent;
 <span class="code-keyword">import</span> javax.faces.context.FacesContext;
 <span class="code-keyword">import</span> javax.faces.el.ValueBinding;
 <span class="code-keyword">import</span> javax.faces.webapp.UIComponentTag;

 <span class="code-keyword">public</span> class TextWithCmdTag <span class="code-keyword">extends</span> UIComponentTag {
    <span class="code-keyword">private</span> <span class="code-object">String</span> size;
    <span class="code-keyword">private</span> <span class="code-object">String</span> value;

    <span class="code-keyword">public</span> <span class="code-object">String</span> getComponentType() {
        <span class="code-keyword">return</span> <span class="code-quote">&quot;onlyfun.caterpillar.TextWithCmd&quot;</span>;
    }

    <span class="code-keyword">public</span> <span class="code-object">String</span> getRendererType() {
        <span class="code-keyword">return</span> <span class="code-keyword">null</span>;
    }

    <span class="code-keyword">public</span> void setProperties(UIComponent component) {
        <span class="code-keyword">super</span>.setProperties(component);

        setStringProperty(component, <span class="code-quote">&quot;size&quot;</span>, size);
        setStringProperty(component, <span class="code-quote">&quot;value&quot;</span>, value);
    }

    <span class="code-keyword">private</span> void setStringProperty(UIComponent component,
                       <span class="code-object">String</span> attrName, <span class="code-object">String</span> attrValue) {
        <span class="code-keyword">if</span>(attrValue == <span class="code-keyword">null</span>)
            <span class="code-keyword">return</span>;

        <span class="code-keyword">if</span>(isValueReference(attrValue)) {
            FacesContext context =
                         FacesContext.getCurrentInstance();
            Application application =
                         context.getApplication();
            ValueBinding binding =
                   application.createValueBinding(attrValue);
            component.setValueBinding(attrName, binding);
        }
        <span class="code-keyword">else</span> {
            component.getAttributes().
                          put(attrName, attrValue);
        }
    }

    <span class="code-keyword">public</span> void release() {
        <span class="code-keyword">super</span>.release();
        size = <span class="code-keyword">null</span>;
        value = <span class="code-keyword">null</span>;
    }

    <span class="code-keyword">public</span> <span class="code-object">String</span> getSize() {
        <span class="code-keyword">return</span> size;
    }

    <span class="code-keyword">public</span> void setSize(<span class="code-object">String</span> size) {
        <span class="code-keyword">this</span>.size = size;
    }

    <span class="code-keyword">public</span> <span class="code-object">String</span> getValue() {
        <span class="code-keyword">return</span> value;
    }

    <span class="code-keyword">public</span> void setValue(<span class="code-object">String</span> value) {
        <span class="code-keyword">this</span>.value = value;
    }
 }</pre>
							</div>
						</div>
						<p>  首先看到這兩個方法:</p>
						<div class="code" style="BORDER-TOP-STYLE: solid; BORDER-RIGHT-STYLE: solid; BORDER-LEFT-STYLE: solid; BORDER-BOTTOM-STYLE: solid">
							<div class="codeContent">
								<pre class="code-java"><span class="code-keyword">public</span> <span class="code-object">String</span> getComponentType() {
        <span class="code-keyword">return</span> <span class="code-quote">&quot;onlyfun.caterpillar.TextWithCmd&quot;</span>;
    }

    <span class="code-keyword">public</span> <span class="code-object">String</span> getRendererType() {
        <span class="code-keyword">return</span> <span class="code-keyword">null</span>;
    }</pre>
							</div>
						</div>
						<p>
						  由于我們的Component目前不使用Renderer,所以getRendererType()傳回null值,而
						getComponentType()在于讓JSF取得這個Tag所對應的Component,所傳回的值在faces-config.xml中要有定義,例如:</p>
						<div class="code" style="BORDER-TOP-STYLE: solid; BORDER-RIGHT-STYLE: solid; BORDER-LEFT-STYLE: solid; BORDER-BOTTOM-STYLE: solid">
							<div class="codeContent">
								<pre class="code-java">....
 &lt;component&gt;
    &lt;component-type&gt;
        onlyfun.caterpillar.TextWithCmd
    &lt;/component-type&gt;
    &lt;component-class&gt;
        onlyfun.caterpillar.UITextWithCmd
    &lt;/component-class&gt;
 &lt;/component&gt;
 ....</pre>
							</div>
						</div>
						<p>  藉由faces-config.xml中的定義,JSF可以得知
						onlyfun.caterpillar.TextWithCmd的真正類別,而這樣的定義方式很顯然的,您可以隨時換掉&lt;component-
						class&gt;所對應的類別,也就是說,Tag所對應的Component是可以隨時替換的。</p>
						<p>
						  在設定Component屬性值時,可以由component.getAttributes()取得Map對象,并將卷標屬性值存入Map
						中,這個Map對象可以在對應的Component中使用getAttributes()取得,例如在上一個主題中的UITextWithCmd中可以如下取得存入Map的size屬性:</p>
						<div class="code" style="BORDER-TOP-STYLE: solid; BORDER-RIGHT-STYLE: solid; BORDER-LEFT-STYLE: solid; BORDER-BOTTOM-STYLE: solid">
							<div class="codeHeader" style="BORDER-BOTTOM-STYLE: solid">
								<b>UITextWithCmd.java</b></div>
							<div class="codeContent">
								<pre class="code-java"><span class="code-keyword">package</span> onlyfun.caterpillar;

 <span class="code-keyword">import</span> java.io.IOException;
 <span class="code-keyword">import</span> java.util.Map;

 <span class="code-keyword">import</span> javax.faces.component.UIInput;
 <span class="code-keyword">import</span> javax.faces.context.FacesContext;
 <span class="code-keyword">import</span> javax.faces.context.ResponseWriter;

 <span class="code-keyword">public</span> class UITextWithCmd <span class="code-keyword">extends</span> UIInput {
    ....
    <span class="code-keyword">private</span> void encodeTextField(ResponseWriter writer,
                        <span class="code-object">String</span> clientId) <span class="code-keyword">throws</span> IOException {
        ....

        <span class="code-object">String</span> size = (<span class="code-object">String</span>) getAttributes().get(<span class="code-quote">&quot;size&quot;</span>);
        <span class="code-keyword">if</span>(size != <span class="code-keyword">null</span>) {
            writer.writeAttribute(<span class="code-quote">&quot;size&quot;</span>, size, <span class="code-keyword">null</span>);
        }
        .....
    }
    ....
 }</pre>
							</div>
						</div>
						<p>  可以使用isValueReference()來測試是否為JSF Expression
						Language的綁定語法,如果是的話,則我們必須建立ValueBinding對象,并設定值綁定:</p>
						<div class="code" style="BORDER-TOP-STYLE: solid; BORDER-RIGHT-STYLE: solid; BORDER-LEFT-STYLE: solid; BORDER-BOTTOM-STYLE: solid">
							<div class="codeContent">
								<pre class="code-java">....
 <span class="code-keyword">private</span> void setStringProperty(UIComponent component,
                        <span class="code-object">String</span> attrName, <span class="code-object">String</span> attrValue) {
        <span class="code-keyword">if</span>(attrValue == <span class="code-keyword">null</span>)
            <span class="code-keyword">return</span>;

        <span class="code-keyword">if</span>(isValueReference(attrValue)) {
            FacesContext context =
                          FacesContext.getCurrentInstance();
            Application application =
                          context.getApplication();
            ValueBinding binding =
                   application.createValueBinding(attrValue);
            component.setValueBinding(attrName, binding);
        }
        <span class="code-keyword">else</span> {
            component.getAttributes().
                         put(attrName, attrValue);
        }
    }
 ....</pre>
							</div>
						</div>
						<p>  如果是value屬性,記得在上一個主題中我們提過,從UIOutput繼承下來的getValue()方法可以取得
						Component的value設定值,這個值可能是靜態的屬性設定值,也可能是JSF
						Expression的綁定值,預設會先從組件的屬性設定值開始找尋,如果找不到,再從綁定值(ValueBinding對象)中找尋。</p>
						<p>  最后,我們必須提供自訂Tag的tld檔:</p>
						<div class="code" style="BORDER-TOP-STYLE: solid; BORDER-RIGHT-STYLE: solid; BORDER-LEFT-STYLE: solid; BORDER-BOTTOM-STYLE: solid">
							<div class="codeHeader" style="BORDER-BOTTOM-STYLE: solid">
								<b>textcmd.tld</b></div>
							<div class="codeContent">
								<pre class="code-java">&lt;?xml version=<span class="code-quote">&quot;1.0&quot;</span> encoding=<span class="code-quote">&quot;UTF-8&quot;</span>?&gt;
 &lt;taglib version=<span class="code-quote">&quot;2.0&quot;</span>
     xmlns=<span class="code-quote">&quot;http:<span class="code-comment">//java.sun.com/xml/ns/j2ee&quot;</span>
</span>     xmlns:xsi=<span class="code-quote">&quot;http:<span class="code-comment">//www.w3.org/2001/XMLSchema-instance&quot;</span>
</span> xsi:schemaLocation=
 <span class="code-quote">&quot;http:<span class="code-comment">//java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd&quot;</span>&gt;
</span> &lt;tlib-version&gt;1.0&lt;/tlib-version&gt;
 &lt;jsp-version&gt;2.0&lt;/jsp-version&gt;
 &lt;<span class="code-object">short</span>-name&gt;textcmd&lt;/<span class="code-object">short</span>-name&gt;
 &lt;uri&gt;http:<span class="code-comment">//caterpillar.onlyfun.net/textcmd&lt;/uri&gt;
</span>
 &lt;tag&gt;
     &lt;name&gt;textcmd&lt;/name&gt;
     &lt;tag-class&gt;onlyfun.caterpillar.TextWithCmdTag&lt;/tag-class&gt;
     &lt;body-content&gt;empty&lt;/body-content&gt;
     &lt;attribute&gt;
        &lt;name&gt;size&lt;/name&gt;
     &lt;/attribute&gt;
     &lt;attribute&gt;
        &lt;name&gt;value&lt;/name&gt;
        &lt;required&gt;<span class="code-keyword">true</span>&lt;/required&gt;
     &lt;/attribute&gt;
 &lt;/tag&gt;

 &lt;/taglib&gt;</pre>
							</div>
						</div>
					</div>
					</td>
				</tr>
			</table>
			</td>
		</tr>
	</table>
</div>

</body>

</html>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久婷婷成人综合色| 91黄色免费网站| 视频一区二区三区在线| 亚洲区小说区图片区qvod| 国产精品成人免费精品自在线观看 | 欧美三级中文字幕在线观看| 97成人超碰视| 欧美日韩一区视频| 91麻豆精品国产自产在线| 欧美专区日韩专区| 欧美老年两性高潮| 欧美一区二区三区视频在线 | 欧美巨大另类极品videosbest | 日韩一区二区电影在线| 日韩欧美亚洲另类制服综合在线| 51精品视频一区二区三区| 欧美一区二区三区白人| 欧美大度的电影原声| 精品国产伦一区二区三区观看方式| 亚洲精品一区二区精华| 国产欧美日韩精品一区| 亚洲人被黑人高潮完整版| 亚洲一区二区影院| 麻豆精品新av中文字幕| 国产一区二区三区电影在线观看| 国产不卡高清在线观看视频| 色综合一区二区三区| 精品国产欧美一区二区| 久久久99免费| 亚洲欧美一区二区三区极速播放| 有坂深雪av一区二区精品| 亚洲6080在线| 成人爱爱电影网址| 91在线视频播放地址| 欧美在线观看你懂的| 日韩一区二区三免费高清| 久久久久免费观看| 亚洲在线视频一区| 国产米奇在线777精品观看| 99久久国产免费看| 欧美一区在线视频| 成人欧美一区二区三区小说| 免费在线看成人av| caoporen国产精品视频| 日韩一区二区在线看| 亚洲欧美一区二区在线观看| 另类小说一区二区三区| av亚洲精华国产精华精| 日韩精品一区二区三区在线观看| 亚洲男人的天堂av| 国产精品一区二区黑丝| 欧美理论片在线| 亚洲欧美福利一区二区| 国产酒店精品激情| 日韩限制级电影在线观看| 一区二区三区四区视频精品免费| 国产精品一区不卡| 精品伦理精品一区| 青青草伊人久久| 欧美日韩一区二区三区不卡| 亚洲欧美一区二区三区久本道91| 国产精品夜夜嗨| 日韩免费高清av| 毛片一区二区三区| 在线成人高清不卡| 亚洲国产综合视频在线观看| 成人av高清在线| 国产日韩欧美精品在线| 精品无人区卡一卡二卡三乱码免费卡 | 日本欧洲一区二区| 精品视频在线免费观看| 亚洲一区二区成人在线观看| 色综合天天综合网天天看片| 中文字幕欧美一| 91麻豆免费在线观看| 国产网站一区二区| 成人毛片在线观看| 国产精品不卡一区| 成人激情综合网站| 中文字幕中文字幕中文字幕亚洲无线| 丁香网亚洲国际| 国产精品国产a| 日本久久电影网| 蜜臀91精品一区二区三区| 日韩亚洲欧美一区| 国产酒店精品激情| 国产精品久久久久国产精品日日| 成人97人人超碰人人99| 亚洲品质自拍视频| 欧美日韩国产成人在线免费| 日韩精品乱码免费| 2021中文字幕一区亚洲| 成人免费看的视频| 怡红院av一区二区三区| 欧美另类高清zo欧美| 久久se精品一区精品二区| 欧美国产一区二区在线观看 | 欧美性感一类影片在线播放| 亚洲成人在线网站| 欧美mv和日韩mv国产网站| 成人晚上爱看视频| 亚洲国产日韩一级| 精品福利视频一区二区三区| aaa国产一区| 美女视频网站黄色亚洲| 国产日韩欧美在线一区| 色综合久久久久| 精彩视频一区二区| 亚洲免费观看视频| 久久综合九色综合97婷婷女人 | 美女视频第一区二区三区免费观看网站| 欧美成人一区二区三区片免费 | 国产精品99久久久久久久女警| 日韩理论片中文av| 欧美成人video| 色综合咪咪久久| 国产麻豆视频一区二区| 亚洲美女区一区| 国产香蕉久久精品综合网| 91豆麻精品91久久久久久| 国产专区欧美精品| 五月婷婷综合在线| 亚洲色图清纯唯美| 国产欧美一区视频| 欧美一区永久视频免费观看| 91免费在线看| 国产成人鲁色资源国产91色综 | 91精品综合久久久久久| 国产1区2区3区精品美女| 日韩不卡免费视频| 一区二区三区精品在线| 日本一区免费视频| 日韩一区二区三区观看| 欧美在线观看一二区| 播五月开心婷婷综合| 精品无人码麻豆乱码1区2区| 亚洲三级电影全部在线观看高清| 精品国产一区二区精华| 欧美日韩一区精品| 91视频国产观看| 97aⅴ精品视频一二三区| 国产一区二区三区在线观看免费视频| 秋霞电影网一区二区| 天堂av在线一区| 无码av中文一区二区三区桃花岛| 一区二区高清视频在线观看| 国产精品久久久久久亚洲毛片| 国产亚洲福利社区一区| 久久综合九色综合97婷婷| 日韩精品中文字幕在线一区| 日韩欧美一级二级三级| 日韩一级片在线观看| 日韩美一区二区三区| 精品欧美一区二区三区精品久久 | 制服.丝袜.亚洲.另类.中文| 在线免费观看日韩欧美| 一本到三区不卡视频| 91蜜桃免费观看视频| 成人黄色在线看| 成人午夜av在线| 91小视频在线观看| 99精品偷自拍| 在线观看精品一区| 精品视频一区三区九区| 欧美群妇大交群中文字幕| 欧美人体做爰大胆视频| 欧美一区二区三区免费大片| 欧美刺激午夜性久久久久久久| 日韩一区二区三区高清免费看看| 精品久久一二三区| 国产日韩av一区| 亚洲欧美经典视频| 亚洲自拍偷拍九九九| 亚洲国产精品一区二区www| 亚洲第一福利视频在线| 日本亚洲天堂网| 成人综合日日夜夜| 在线观看日韩电影| 日韩精品资源二区在线| 中文字幕精品一区二区精品绿巨人| 亚洲人成精品久久久久久| 日韩综合一区二区| 国产iv一区二区三区| 欧美三日本三级三级在线播放| 欧美α欧美αv大片| 国产精品视频第一区| 婷婷中文字幕综合| 国产福利不卡视频| 91性感美女视频| 欧美精品一区二区三区蜜臀| 一区二区在线观看免费视频播放| 日本三级亚洲精品| 91免费看视频| 久久久精品综合| 国产激情91久久精品导航| 91免费小视频| 欧美精品一区二区在线观看| 一区二区三区免费网站| 懂色一区二区三区免费观看| 日韩无一区二区|