先看下面?JSF 面Q?/p>
<%...@ page language="Java" pageEncoding="UTF-8"%> <html> <body> 要注意的是,不能?JavaScript 函数中用如下类D法来讉K表单lgQ?br />
document.formLogin.txtUsername.value; q是因ؓ JSF 解释上面?<h:form id="formForm">...</h:form> 一D|会生成如下代码: <form id="formLogin" method="post" action="/Project_Blog/login.faces"
<%...@ taglib uri="
<%...@ taglib uri="
<head>
<title>My JSF 'login.jsp' starting page</title>
<script type="text/Javascript">...
function isEmpty() ...{
var username = document.getElementById("formLogin:txtUsername").value;
var password = document.getElementById("formLogin:txtPassword").value;
if(username == "") ...{
alert("l老子输用户名Q?);
document.getElementById("formLogin:txtUsername").focus();
return false;
}
if(password == "") ...{
alert("不输密码你登录个铲铲Q?);
document.getElementById("formLogin:txtPassword").focus();
return false;
}
}
</script>
</head>
<center>
<f:view>
<h:form id="formLogin">
<div id="input">
<h:outputLabel value="用户名:" />
<h:inputText value="#{LoginManager.username}" id="txtUsername"
styleClass="formText" />
<br>
<h:outputLabel value="密码:" />
<h:inputSecret value="#{LoginManager.password}" id="txtPassword"
styleClass="formText" />
</div>
<div id="submit">
<h:commandButton value="提交" action="#{LoginManager.check}"
onclick="return isEmpty();" styleClass="formButton" />
<h:commandButton value="重置" type="button"
onclick="Javascript:document.getElementById('formLogin').reset();
document.getElementById('formLogin:txtUsername').focus();"
styleClass="formButton" />
</div>
</h:form>
</f:view>
</center>
</body>
</html>
q个面使用 JavaScript 来确认登录时用户名和密码是否为空Q表单名?formLoginQ两个输入组件名?txtUsername ?txtPasswordQ当单击按钮Ӟ调?JavaScript 函数 isEmpty()Q根据条件判断显C对话框或是提交表单?/p>
而应使用Q?br />
document.getElementById("formLogin:txtUsername").value;
或者:
document.forms.formLogin["formLogin:txtUsername"].value;
enctype="application/x-www-form-urlencoded">
<div id="input">
<label>用户名:</label>
<input id="formLogin:txtUsername" type="text"
name="formLogin:txtUsername" class="formText" />
<br>
<label>密码:</label>
<input id="formLogin:txtPassword" type="password"
name="formLogin:txtPassword" value="" class="formText" />
</div>
<div id="submit">
<input type="submit" name="formLogin:_id2" value="提交"
onclick="return isEmpty();" class="formButton" />
<input type="button" name="formLogin:_id3" value="重置"
onclick="Javascript:document.getElementById('formLogin').reset();
document.getElementById('formLogin:txtUsername').focus();" class="formButton" />
</div>
<input type="hidden" name="formLogin" value="formLogin" />
</form>
JSF 产生的所有表单控仉有符?formName:componentName 格式的名Uͼq里?formName 表示控g的表单的名称Q?componentName 表示lg名称。如果没有指?id 属性,?JSF 框架会自动创建标识符Q就象上面的 HTML 片段中的按钮一栗因此,要访问上面的用户名字D,必须使用下列Ҏ(gu)Q?br />
document.getElementById("formLogin:txtUsername").value;
]]>
1.转换旉Ӟ必须加上时区GMT+8Q不然相差一天?
<f:convertDateTime timeZone="GMT+8" dateStyle="long" type="date"/>
2.<h:outputText value="#{productBean.view}"/>当view为空Ӟ不显C?/div>
3.
actionListener在执行了action之后再执行?/div>
可以没有actionQ而只有actionListener?/div>
action可以讄成一个方法,也可以设|ؓ一个导航用例的<from-outcome>
多个面如果使用了同一个requestU的backingBeanQ可能导致一些莫名其妙的问题。如Q不能执行指定的Action.
4.对于向managed-bean的属性注入request参数Ӟ?lt;managed-bean-scope>必须为request,<property-class>不要为值类?如果是值类型,当指定的request参数为空Ӟ
http://www.kpwang.com/注入时会出错Q因Z个空对象如Integer null不能自动转换Z个值类型如int?)。如下所C:
<managed-bean>
<managed-bean-name>productBean</managed-bean-name> <managed-bean-class>demo.view.ProductBean</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> <managed-property> <property-name>id</property-name> <property-class>java.lang.Integer</property-class> <value>#{param.id}</value> </managed-property> <managed-property> <property-name>view</property-name> <property-class>java.lang.Boolean</property-class> <value>#{param.view}</value> </managed-property> </managed-bean> 5.对于以下查找是按部gid查找的,不是按参数名U查扄?/div>
UIParameter uip =(UIParameter)event.getComponent().findComponent("productId");
//event是actionListener中的参数ActionEventcd?/div>
所?/div>
<h:commandLink action="view">
<f:param id="productId" name="id" value="#{product.id}"/>
</h:commandLink>
<f:prarm>必须讄id
Map params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
String someValue = params.get("id"); q个是按参数名称查找? JSF标签只是JSFlg的外,Id是lg的命名,与Delphi的组件名是一LQ之所以用Id不用Name,是ؓ了与HTML中的一_HTML inputlg id是其标识Qname是其传递到服务器端的参数名。)Q所以查找JSFlg当然用Id了?/div>
6.当一个页面的BackingBean的构造函Cq行出错或属性注入出错时Q表面上会报计算表达式错误,原因是这个BackingBean没有构造出来,为空Q当然在Reader面时会没有办法求相关的表达式的倹{?/div>
7.requestU的BackingBean在从客户端到服务端一ơ请求后Q就被销毁。在q次h中,只会被创Zơ。在Forward之前创徏的BackingBean在Forward之后Qƈ不会被再ơ创建?/div>
8.判断是否是回传?/div>
protected boolean isPostBack()
{ if (FacesContext.getCurrentInstance().getRenderResponse()) return false; else return true; } 9.<f:view>里?lt;jsp:include>时的注意事项
感谢 tdwebber 提供?/div> 1) When using a jsp:include within the f:view tags, must include f:subview in the included file (or around the jsp:include tag).鲲鹏|?/font> 当在f:view中?strong>jsp:include标签插入一个文件时Q?/p> http://www.kpwang.com/必须用f:subview?strong>jsp:include包v?
2) In the include file, cannot have any HTML. All HTML tags must be wrapped in f:verbatim tags. 在被插入的文件中Q不能有M的html标签Q如果必M用html标签Q必ȝf:verbatim它包v来?/p> 3) Within main f:view tags however, it is not necessary to wrap everything in f:verbatim tags (it´s not bad either). Just HTML that appears as children to other JSF components (i.e. t:newspaperTable). 在主f:view中,没有必要用f:verbatimhtml标签包v来(当然包v来也可以Q。当html标签出现在子视图或其它JSF部g标签中时Q就要用f:verbatim包v来?/p> 10.JSF的缓存能力好像太ZQ有时停止了服务器,改动?strong>jsp面中的jsf标签Q再启动服务器,但到该页面时Q还是原来的内容Q需要手动刷C下。有旉要先转到别的面Q再回来h一下才能看到更新的内容?/p> |