﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-zdq5337-文章分类-jsf</title><link>http://www.blogjava.net/zdq5337/category/40183.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 10 Jun 2009 18:29:34 GMT</lastBuildDate><pubDate>Wed, 10 Jun 2009 18:29:34 GMT</pubDate><ttl>60</ttl><item><title>JavaScript 访问 JSF 组件的方法（转载）</title><link>http://www.blogjava.net/zdq5337/articles/281191.html</link><dc:creator>空山戊</dc:creator><author>空山戊</author><pubDate>Wed, 10 Jun 2009 09:11:00 GMT</pubDate><guid>http://www.blogjava.net/zdq5337/articles/281191.html</guid><wfw:comment>http://www.blogjava.net/zdq5337/comments/281191.html</wfw:comment><comments>http://www.blogjava.net/zdq5337/articles/281191.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zdq5337/comments/commentRss/281191.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zdq5337/services/trackbacks/281191.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="word-spacing: 0px; font: 14px/25px -webkit-sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; text-align: left; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 2px; webkit-border-vertical-spacing: 2px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0">
<p>先看下面的 JSF 页面：</p>
<p>&nbsp;</p>
<p>&lt;%...@ page language="Java" pageEncoding="UTF-8"%&gt;<br />
&lt;%...@ taglib uri="<a style="color: rgb(24,72,181); text-decoration: none" href="http://java.sun.com/jsf/html">http://Java.sun.com/jsf/html</a>" prefix="h"%&gt;<br />
&lt;%...@ taglib uri="<a style="color: rgb(24,72,181); text-decoration: none" href="http://java.sun.com/jsf/core">http://Java.sun.com/jsf/core</a>" prefix="f"%&gt;</p>
<p>&lt;html&gt;<br />
&nbsp; &lt;head&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;title&gt;My JSF 'login.jsp' starting page&lt;/title&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;script type="text/Javascript"&gt;...<br />
&nbsp;&nbsp;&nbsp; function isEmpty() ...{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var username = document.getElementById("formLogin:txtUsername").value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var password = document.getElementById("formLogin:txtPassword").value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(username == "") ...{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("给老子输用户名！");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.getElementById("formLogin:txtUsername").focus();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(password == "") ...{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("不输密码你登录个铲铲！");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.getElementById("formLogin:txtPassword").focus();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &lt;/script&gt;<br />
&nbsp; &lt;/head&gt;</p>
<p>&nbsp; &lt;body&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;center&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;f:view&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;h:form id="formLogin"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;div id="input"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;h:outputLabel value="用户名：" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;h:inputText value="#{LoginManager.username}" id="txtUsername"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; styleClass="formText" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;br&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;h:outputLabel value="密码：" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;h:inputSecret value="#{LoginManager.password}" id="txtPassword"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; styleClass="formText" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/div&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;div id="submit"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;h:commandButton value="提交" action="#{LoginManager.check}"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onclick="return isEmpty();" styleClass="formButton" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;h:commandButton value="重置" type="button"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onclick="Javascript:document.getElementById('formLogin').reset();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.getElementById('formLogin:txtUsername').focus();"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; styleClass="formButton" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/div&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/h:form&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/f:view&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/center&gt;<br />
&nbsp; &lt;/body&gt;<br />
&lt;/html&gt;<br />
这个页面使用 JavaScript 来确认登录时用户名和密码是否为空，表单名为 formLogin，两个输入组件名为 txtUsername 和 txtPassword，当单击按钮时，将调用 JavaScript 函数 isEmpty()，根据条件判断显示对话框或是提交表单。</p>
<p>要注意的是，不能在 JavaScript 函数中使用如下类似语法来访问表单组件：<br />
document.formLogin.txtUsername.value;<br />
而应使用：<br />
document.getElementById("formLogin:txtUsername").value;<br />
或者：<br />
document.forms.formLogin["formLogin:txtUsername"].value;</p>
<p>这是因为 JSF 解释上面的 &lt;h:form id="formForm"&gt;...&lt;/h:form&gt; 一段时会生成如下代码：</p>
<p>&lt;form id="formLogin" method="post" action="/Project_Blog/login.faces"<br />
&nbsp; enctype="application/x-www-form-urlencoded"&gt;<br />
&nbsp; &lt;div id="input"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;label&gt;用户名：&lt;/label&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;input id="formLogin:txtUsername" type="text"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name="formLogin:txtUsername" class="formText" /&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;br&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;label&gt;密码：&lt;/label&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;input id="formLogin:txtPassword" type="password"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name="formLogin:txtPassword" value="" class="formText" /&gt;<br />
&nbsp; &lt;/div&gt;<br />
&nbsp; &lt;div id="submit"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;input type="submit" name="formLogin:_id2" value="提交"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onclick="return isEmpty();" class="formButton" /&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;input type="button" name="formLogin:_id3" value="重置"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onclick="Javascript:document.getElementById('formLogin').reset();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.getElementById('formLogin:txtUsername').focus();" class="formButton" /&gt;<br />
&nbsp; &lt;/div&gt;<br />
&nbsp; &lt;input type="hidden" name="formLogin" value="formLogin" /&gt;<br />
&lt;/form&gt;<br />
JSF 产生的所有表单控件都有符合 formName:componentName 格式的名称，这里的 formName 表示控件的表单的名称，而 componentName 表示组件名称。如果没有指定 id 属性，则 JSF 框架会自动创建标识符，就象上面的 HTML 片段中的按钮一样。因此，要访问上面的用户名字段，必须使用下列方法：<br />
document.getElementById("formLogin:txtUsername").value;</p>
</span>
<img src ="http://www.blogjava.net/zdq5337/aggbug/281191.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zdq5337/" target="_blank">空山戊</a> 2009-06-10 17:11 <a href="http://www.blogjava.net/zdq5337/articles/281191.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSF使用注意点（转载）</title><link>http://www.blogjava.net/zdq5337/articles/281189.html</link><dc:creator>空山戊</dc:creator><author>空山戊</author><pubDate>Wed, 10 Jun 2009 09:07:00 GMT</pubDate><guid>http://www.blogjava.net/zdq5337/articles/281189.html</guid><wfw:comment>http://www.blogjava.net/zdq5337/comments/281189.html</wfw:comment><comments>http://www.blogjava.net/zdq5337/articles/281189.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zdq5337/comments/commentRss/281189.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zdq5337/services/trackbacks/281189.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="word-spacing: 0px; font: 12px -webkit-sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; text-align: left; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 1px; webkit-border-vertical-spacing: 1px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0">
<table>
    <tbody>
        <tr>
            <td style="width: 740px; text-align: left" valign="top"><span onmouseup="NewHighlight(event)" class="wenzhang_con" id="articlecontent" style="font-size: 14px; width: 100%; word-break: break-all; line-height: 25px">
            <div>1.转换时间时，必须加上时区GMT+8，不然相差一天。
            <div>&lt;f:convertDateTime&nbsp; timeZone="GMT+8" dateStyle="long" type="date"/&gt;</div>
            <div>&nbsp;</div>
            <div>2.&lt;h:outputText value="#{productBean.view}"/&gt;当view为空时，不显示。</div>
            <div>&nbsp;</div>
            <div>3.&nbsp;</div>
            <div>actionListener在执行了action之后再执行。</div>
            <div>&nbsp;</div>
            <div>可以没有action，而只有actionListener。</div>
            <div>&nbsp;</div>
            <div>action可以设置成一个方法，也可以设置为一个导航用例的&lt;from-outcome&gt;</div>
            <div>多个页面如果使用了同一个request级的backingBean，可能导致一些莫名其妙的问题。如：不能执行指定的Action.</div>
            <div>&nbsp;</div>
            <div>4.对于向managed-bean的属性注入request参数时，其&lt;managed-bean-scope&gt;必须为request,&lt;property-class&gt;不要为值类型(如果是值类型，当指定的request参数为空时，<span class="Apple-converted-space">&nbsp;</span>
            <div style="float: right"></div>
            http://www.kpwang.com/注入时会出错，因为一个空对象如Integer null不能自动转换为一个值类型如int的0)。如下所示：</div>
            <div>&lt;managed-bean&gt;<br />
            &nbsp; &nbsp;&lt;managed-bean-name&gt;productBean&lt;/managed-bean-name&gt;<br />
            &nbsp; &nbsp;&lt;managed-bean-class&gt;demo.view.ProductBean&lt;/managed-bean-class&gt;<br />
            &nbsp; &nbsp;&lt;managed-bean-scope&gt;request&lt;/managed-bean-scope&gt;<br />
            &nbsp; &nbsp;&lt;managed-property&gt;<br />
            &nbsp; &nbsp;&nbsp;&lt;property-name&gt;id&lt;/property-name&gt;<br />
            &nbsp; &nbsp;&nbsp;&lt;property-class&gt;<strong>java</strong>.lang.Integer&lt;/property-class&gt;<br />
            &nbsp; &nbsp;&nbsp;&lt;value&gt;#{param.id}&lt;/value&gt;<br />
            &nbsp; &nbsp;&lt;/managed-property&gt;<br />
            &nbsp; &nbsp;&lt;managed-property&gt;<br />
            &nbsp; &nbsp;&nbsp;&lt;property-name&gt;view&lt;/property-name&gt;<br />
            &nbsp; &nbsp;&nbsp;&lt;property-class&gt;<strong>java</strong>.lang.Boolean&lt;/property-class&gt;<br />
            &nbsp; &nbsp;&nbsp;&lt;value&gt;#{param.view}&lt;/value&gt;<br />
            &nbsp; &nbsp;&lt;/managed-property&gt;<br />
            &nbsp; &lt;/managed-bean&gt;</div>
            <div>&nbsp;</div>
            <div>5.对于以下查找是按部件id查找的，不是按参数名称查找的。</div>
            <div>UIParameter uip =(UIParameter)event.getComponent().findComponent("productId");</div>
            <div>//event是actionListener中的参数ActionEvent类型。</div>
            <div>所以</div>
            <div>&lt;h:commandLink action="view"&gt;</div>
            <div>&lt;f:param&nbsp;id="productId" name="id" value="#{product.id}"/&gt;</div>
            <div>&lt;/h:commandLink&gt;</div>
            <div>&lt;f:prarm&gt;必须设置id</div>
            <div>&nbsp;</div>
            <div>Map&nbsp;params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();</div>
            <div>String someValue = params.get("id");<span class="Apple-converted-space">&nbsp;</span><br />
            这个是按参数名称查找的
            <div></div>
            <div>JSF标签只是JSF组件的外衣，Id就是组件的命名，与Delphi的组件名是一样的，之所以用Id不用Name,是为了与HTML中的一致（HTML input组件 id是其标识，name是其传递到服务器端的参数名。），所以查找JSF组件当然用Id了。</div>
            <div>&nbsp;</div>
            <div>6.当一个页面的BackingBean的构造函数中运行出错或属性注入出错时，表面上会报计算表达式错误，原因是这个BackingBean没有构造出来，为空，当然在Reader页面时会没有办法求相关的表达式的值。</div>
            <div>&nbsp;</div>
            <div>&nbsp;</div>
            <div>7.request级的BackingBean在从客户端到服务端一次请求后，就被销毁。在这次请求中，只会被创建一次。在Forward之前创建的BackingBean在Forward之后，并不会被再次创建。</div>
            <div>&nbsp;</div>
            <div>8.判断是否是回传。</div>
            <div>protected boolean isPostBack()<br />
            &nbsp;{<br />
            &nbsp;&nbsp;if (FacesContext.getCurrentInstance().getRenderResponse())<br />
            &nbsp;&nbsp;&nbsp;return false;<br />
            &nbsp;&nbsp;else<br />
            &nbsp;&nbsp;&nbsp;return true;<br />
            &nbsp;}</div>
            <div>&nbsp;</div>
            <div>&nbsp;</div>
            <div>9.&lt;f:view&gt;里使用&lt;<strong>jsp</strong>:include&gt;时的注意事项<span class="Apple-converted-space">&nbsp;</span><br />
            感谢 tdwebber 提供。</div>
            <p>1) When using a<span class="Apple-converted-space">&nbsp;</span><strong>jsp</strong>:include within the f:view tags, must include f:subview in the included file (or around the<span class="Apple-converted-space">&nbsp;</span><strong>jsp</strong>:include tag).<a style="color: rgb(24,72,181); text-decoration: none" href="http://www.kpwang.com/"><font style="line-height: 150%" size="2">鲲鹏网</font></a></p>
            <p>当在f:view中使用<strong>jsp</strong>:include标签插入一个文件时，</p>
            <div style="float: right"></div>
            http://www.kpwang.com/必须用f:subview把<strong>jsp</strong>:include包起来
            <p>&nbsp;</p>
            <p>2) In the include file, cannot have any HTML. All HTML tags must be wrapped in f:verbatim tags.</p>
            <p>在被插入的文件中，不能有任何的html标签，如果必须使用html标签，必须用f:verbatim将它包起来。</p>
            <p>3) Within main f:view tags however, it is not necessary to wrap everything in f:verbatim tags (it&#180;s not bad either). Just HTML that appears as children to other JSF components (i.e. t:newspaperTable).</p>
            <p>在主f:view中，没有必要用f:verbatim将html标签包起来（当然包起来也可以）。当html标签出现在子视图或其它JSF部件标签中时，就要用f:verbatim包起来。</p>
            <p>10.JSF的缓存能力好像太强了，有时停止了服务器，改动了<strong>jsp</strong>页面中的jsf标签，再启动服务器，但到该页面时，还是原来的内容，需要手动刷新一下。有时需要先转到别的页面，再回来刷新一下才能看到更新的内容。</p>
            </div>
            </div>
            </span></td>
        </tr>
    </tbody>
</table>
</span>
<img src ="http://www.blogjava.net/zdq5337/aggbug/281189.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zdq5337/" target="_blank">空山戊</a> 2009-06-10 17:07 <a href="http://www.blogjava.net/zdq5337/articles/281189.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>