锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 浠ュ墠浣跨敤facelets鍙槸瀹氫箟涓涓晫闈㈢殑妯℃澘錛屽茍涓嶆病鏈夋繁鍏ュ畠鐨勮嚜瀹氫箟緇勪歡鏂歸潰鐨勫唴瀹癸紝鍏跺疄瀹冪殑鑷畾涔夌粍浠朵篃灝辨槸瀹氫箟涓涓猼ag錛岀劧鍚庡湪xhtml涓紩鍏ヨ繖涓猼ag錛屼絾榪欒姣旀櫘閫氱殑JSP鏂瑰紡鐨則ag鏂逛究澶氫簡銆?/p>
瑕佹兂寮曠敤鑷畾涔夌殑tag瑕佸湪web.xml涓姞鍏ヤ笅闈唬鐮?鍓嶆彁鏄竴瀹氶厤緗ソ鍏朵粬鐨刦acelets鍐呭) <context-param> <?xml version="1.0"?> <facelet-taglib> 鍦ㄨ繖閲屽紩鐢ㄤ簡涓涓猚omponent.jspx鏂囦歡錛岃繖涓枃浠跺氨鏄竴涓垨涓緇勬兂鏀懼湪涓鍧楀綋鍋氫竴涓粍浠朵嬌鐢ㄧ殑鍐呭錛屽拰鍏朵粬鐨刯spx鏂囦歡鐨勫啓娉曚竴鏍楓傚唴瀹瑰涓嬶細 鍙渶瑕佹敞鎰?lt;ui:composition>鏍囩鍜屽紩鍏ョ殑鍛藉悕絀洪棿灝辮錛屾爣絳鵑噷闈㈢殑鍐呭灝辯湅浣犺瀹屾垚鐨勫姛鑳戒簡銆傚湪榪欓噷鎴戜嬌鐢ㄤ簡ICEfaces鐨勬棩鏈熺粍浠訛紝鍙互鏇挎崲鎴怞SF鏀妧鐨勪換浣曚笢瑗褲?/p>
鎺ヤ笅鏉ュ氨鏄浣跨敤浜嗐?/p>
<html xmlns="<ui:composition template="/pages/layout/layout.jspx"> 榪欓噷闇瑕佸紩鍏ュ懡鍚嶇┖闂達紝瀹氫箟鍓嶇紑涓篴ld錛?/p>
<ald:echo>榪欎釜鏍囩鍚嶅悓xiangyun.taglib.xml涓0鏄庣殑瑕佷竴鑷達紝inputDate鏄湪瀹氫箟緇勪歡component.jspx涓0鏄庣殑#{inputDate}錛屽畠鍙互鎺ユ敹EL琛ㄨ揪寮忋?/p>
榪欐牱鎴戜滑灝卞彲浠ユ妸澶х殑澶嶆潅鐨勯〉闈紝鍒嗘垚鍙互閲嶇敤鐨勭粍浠朵簡銆?/p>
鏈夐棶棰樺彲浠ュ拰鎴戣仈緋伙細wfn_libo@163.com 涔熷彲浠ュ弬鑰?a >https://facelets.dev.java.net/nonav/docs/dev/docbook.html#gettingstarted-bean
鏌ヤ簡濂戒箙娌℃湁鍙戠幇鏄粈涔堝師鍥犮?br />
鍦ㄥ皢ice涓嬭澆鍖呬腑鐨刾ush-server 閮ㄧ講涓婁箣鍚庡氨娌℃湁榪欎釜寮傚父浜嗐備及璁″師鍥犳槸鍦╳eb.xml 涓厤緗簡涓涓猅omcat Push Servlet 寮曡搗鐨勩?br />
web.xml涓殑閮ㄥ垎浠g爜
<servlet>
<servlet-name>Tomcat Push Servlet</servlet-name>
<servlet-class>
com.icesoft.faces.webapp.http.servlet.TomcatPushServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
灝嗚繖涓猻ervlet鍘繪帀鎴栬呮妸push-server.war閮ㄧ講涓婇兘鍙互瑙e喅銆傜湅鍏蜂綋闇瑕佷簡銆?br />
]]>
<param-name>facelets.LIBRARIES</param-name>
<param-value>
/WEB-INF/tld/xiangyun.taglib.xml
</param-value>
</context-param>
xiangyun.taglib.xml鏂囦歡鐨勫唴瀹瑰涓嬶細
<!DOCTYPE facelet-taglib PUBLIC
"-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
"
<namespace>http://xiangyun.cn/components</namespace>
<tag>
<tag-name>echo</tag-name>
<source>component.jspx</source>
</tag>
</facelet-taglib>
<ui:composition xmlns:ui="<ice:selectInputDate id="inputDate" popupDateFormat="MM/dd/yyyy"
value="#{inputDate}" renderAsPopup="true"
styleClass="iceSelInpDateInput" onkeydown="ctlent(event);"
rendered="true">
</ice:selectInputDate>
<h:outputText value="#{inputDate}"
rendered="true" styleClass="printText">
<f:convertDateTime dateStyle="long" type="date" timeZone="GMT+8"
locale="cn" />
</h:outputText>
</ui:composition>
<ui:define name="content">
<h:form id="testForm">
<ald:echo inputDate="#{testBean.date}"/>
</h:form>
</ui:define>
</ui:composition>
</html>
]]>
棣栧厛鍦╩anagedBean涓垱寤虹粍浠?/p>
1銆佸垱寤烘寜閽?/p>
private HtmlCommandButton button = new HtmlCommandButton();
public HtmlCommandButton getButton() {
button.setValue("button"); //璁劇疆鎸夐挳涓婃樉紺虹殑鍊?br/>FacesContext context = FacesContext.getCurrentInstance();
ELContext elContext = context.getELContext();
ExpressionFactory ef = context.getApplication().getExpressionFactory();
Class[] c = new Class[0];
// c[0] = ActionEvent.class; //姝ゅ鎯寵皟鐢ㄤ竴涓甫鍙傛暟鐨勬柟娉?娌℃湁鎴愬姛
MethodExpression me = ef.createMethodExpression(elContext,
"#{testBean.testEl}", Void.TYPE, c);
button.setActionExpression(me); //涓洪挳鍔犲叆涓涓搷搴旂殑鏂規硶,榪欑鏂規硶鏄疛SF1.2鏂瑰紡鐨?/p>
return button;
}
//鍦ㄨ繍琛屾椂琚皟鐢ㄧ殑鏂瑰紡,鍚屽墠闈㈢殑鏂規硶緇戝畾涓殑EL琛ㄨ揪鏄竴鑷寸殑.
public void testEl() {
System.out.println("testEl method is run no param");
}
鍦↗SP欏甸潰涓姞鍏ユ寜閽?(testBean鏄湪FacesConfig.xml涓0鏄庣殑涓婄殑bean)
<h:commandButton binding="#{testBean.button }"/>
2銆佸垱寤鴻〃鏍?br/>private HtmlPanelGrid grid = new HtmlPanelGrid();
public HtmlPanelGrid getGrid() {
List list = grid.getChildren();//鍙栧緱琛ㄦ牸鐨勫垪琛?br/>list.add(getHtmlInputText());//鍚戣〃鏍煎垪琛ㄥ姞鍏ョ粍浠?br/>System.out.println("grid column " + grid.getColumns());
return grid;
}
public HtmlInputText getHtmlInputText() {
htmlInputText.setValue("abcc");//榪欓噷鐩存帴璁劇疆鍊間簡錛屽彲浠ラ氳繃expressionFactory.createValueExpression(elContext, "#{testBean.userid}", String.class);鏉ヨ緗艱〃杈懼紡
htmlInputText.setAlt("alt htmlInputText ");
htmlInputText.setConverter(new TestConve());//涓鴻緭鍏ユ璁劇疆杞崲鍣?br/>return htmlInputText;
}
鍦↗SP涓姞鍏ヤ笅闈唬鐮?
<h:panelGrid binding="#{testBean.grid }"/>
灝卞彲浠ュ湪琛ㄦ牸鍐呮樉紺轟竴涓緭鍏ユ浜嗐?/p>
鎴戞槸榪欐牱鍐欑殑:
private FacesContext facesContext;
public FacesContext getFacesContext() {
if (this.facesContext==null)
this.facesContext =FacesContext.getCurrentInstance();
return FacesContext.getCurrentInstance();
}
鐒跺悗鍦ㄥ瓙綾諱腑鐩存帴璋冪敤榪欎釜鏂規硶灝卞彲浠ュ緱鍒癋acesContext浜嗐?/p>
鎯蟲硶鏄ソ鐨勶紝浣嗘槸騫舵病鏈変粩緇嗕簡瑙acesContext鐨勫疄鐜般?/p>
鍏跺疄FacesContext.getCurrentInstance()灝卞凡緇忚兘澶熸瘡璋冪敤鐨勬椂鍊欓兘鍦ㄤ笂涓嬪箍寰楀埌鍚屼竴涓疄渚嬩簡銆備笉蹇呭啀璞℃垜榪欐牱鍐欎簡銆傚弽鑰屼細鐢昏泧娣昏凍銆?/p>
鏀規垚榪欐牱灝卞彲浠ヤ簡銆?/p>
public FacesContext getFacesContext() {
return FacesContext.getCurrentInstance();
}
鍏堢湅浠g爜:
<ice:panelPopup id="affirmDel" rendered="true" visible="#{purchasePlanBean.confirmDel}" modal="true"
style="z-index:1001; width: 350px; height: 200px; top:25%; left:25%;">
<f:facet name="header">
<ice:outputText styleClass="popupTitle" value="#{resource.confirm_title }" />
</f:facet>
<f:facet name="body">
榪欓噷鏄痓ody鐨勫唴瀹?/p>
</f:facet>
</ice:panelPopup>
visible灞炴?鏄〃紺轟粈涔堟椂鍊欐樉紺鴻瀵硅瘽妗?涓鑸槸bean涓殑涓涓猙oolean鍙橀噺鐨勫鹼紝鐒跺悗閫氳繃鍏朵粬鎸夐挳鐨勫姩浣滄敼鍙樿繖涓彉閲忕殑鍊兼潵鏄劇ず瀵硅瘽妗嗐?/p>
modal灞炴э細琛ㄧず瀵硅瘽妗嗘槸鍚︽ā寮忔樉紺恒?/p>
<f:facet name="header"></f:facet>涓殑鍐呭鏄璇濇鐨勬爣棰?/p>
<f:facet name="body"></f:facet>涓殑鍐呭鏄璇濇鐨勬樉紺哄唴瀹廣傚彲浠ヤ負JSF鍏佽鐨勪換浣曞唴瀹廣?/p>
濡傛灉瀵硅瘽鐨刡ody鐨勫唴瀹歸渶瑕佷竴涓猣orm錛岃繖鏃跺簲璇ユ妸涓涓猣orm鏍囩鏀懼埌body鍐呴儴銆傝屼笉鏄斁鍒?lt;ice:panelPopup>榪欎釜鏍囩鐨勫閮ㄣ傚鏋滄斁鍒板閮ㄥ湪鏈夊灝戜釜form 鐨勬儏鍐典笅浼氬嚭鐜板璇濇閮借閬洊璧鋒潵鐨勬儏鍐碉紝瀵艱嚧欏甸潰涓嶈兘浣跨敤浜嗐?/p>
鏈夊涓嬪姛鑳?
1銆佹暟鎹鑳藉涓巄ean鑱旂郴璧鋒潵,鍥犱負鑿滃崟鏄姩鎬佺殑浠庢暟鎹簱閲屽彇鍑烘潵鎴栧姩鎬佺敓鎴愮殑錛?/p>
2銆佽鏃犻檺綰ф鐨勶紙鍏跺疄鏈夌偣鍙樻侊紝閭f湁閭d箞灞傛鐨勮彍鍗曪級錛?/p>
3銆佽鏄疍IV+CSS鐨勶紝涓嶈table鐨勶紙榪欎箞澶氬ぇ鐨勩佺煡鍚嶇殑JSF緇勪歡涓轟粈涔堥兘鏄痶able甯冨眬鍛紵闅鵑亾浠栦滑鍜屾垜涓鏍蜂笉浼氱敤DIV錛焇_^)
...
鍦ㄧ綉涓婁竴鎵撅紝鏈変竴涓狣IV+CSS鐨則ree緇勪歡鍑虹幇浜嗐傚湪 http://cnlei.iecn.net/
涓嬫潵婧愮爜涓鐪嬪緢娓呮櫚銆傝繛鎴戣繖涓嶆噦CSS鐨勪篃鐪嬪緱鏄庣櫧浜嗕竴澶у崐銆傚喅瀹氬氨瀵瑰畠榪涜鏀歸犮傜敓鎴怞SF鐨勭粍浠躲?/p>
鍦ㄥ紑鍙戠殑榪囩▼涓湁涓浜涜璁板綍鐨勶細
1銆丣SF1.2鐨勭粍浠跺紑鍙戝拰JSF1.1鏈夌殑寰堝ぇ鐨勪笉鍚屻傚挨鍏舵槸EL琛ㄨ揪寮忋傝屼笖鏄痚xtends鐨勫熀綾諱篃涓嶅悓銆?/p>
JSF1.2涓殑TagLib瑕佺戶鎵縥avax.faces.webapp.UIComponentELTag銆?/p>
2銆乀agLib鎺ュ彈鐨勫睘鎬у彧鑳芥槸ValueExpression綾誨瀷銆傚鏋滈渶瑕佺敤瀛楃鍨嬨傞渶瑕佸啀榪涜澶勭悊銆備笉璞SF1.1涓湁鏂規硶鍒ゆ柇鏄〃杈懼紡榪樻槸鍊箋?/p>
鎺ュ彈琛ㄨ揪鐨勫鹼紝騫剁粰緇勪歡璧嬪鹼細
private ValueExpression value;
...
if (value != null)
component.setValueExpression("value",
value);
濡傛灉瑕佹帴鍙楀瓧絎︿覆鐨勫睘鎬ц榪欐牱寰楀埌瀛楃涓茬殑鍊箋?/p>
if (id != null)
{
component.setId(id.getExpressionString());
}
3銆佸鏋滄兂鎶婄粍浠跺湪Facelets涓簲鐢紝瑕佸啓Renderer銆傦紙鑷沖皯鎴戞槸榪欐牱錛屼笉鍐橰enderer鍦‵acelets涓氨涓嶈兘搴旂敤銆備絾鍦↗SP涓彲浠ヤ嬌鐢級榪樿鍐欎竴涓猚omponets.tablib.xml銆?/p>
鍦≧enderer涓緱鍒拌〃杈懼紡鐨勫鹼細
ValueExpression valueVe = component.getValueExpression("value");
if
(valueVe != null) {
Object _object =
valueVe.getValue(context.getELContext());
//...
}
4銆佽鍦╢aces-config.xml涓厤緗甤omponent 鍜宺ender-kit.
鎬諱箣鍐橨SF鐨勭粍浠舵槸寰堥夯鐑︾殑浜嬫儏銆傚鏋滄湁鍏朵粬鐨勯夋嫨榪樻槸涓嶈鑷繁鍐欍備絾鏄啓濂戒箣鍚庣敤璧峰嵈鏄潪甯哥殑鏂逛究鐨勩?/p>
<xy:tree value="#{menuBean.nodes}"
title="#{resource.menu_title}"/>
涓鍙ヨ瘽灝卞彲浠ョ敓鎴愪竴鏍戙傚緢鐖藉惂錛?/p>