职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 1166|回复: 0

JavaScript 访问 JSF 组件的方法

[复制链接]
难忘樱花 发表于 2007-8-1 18:10 | 显示全部楼层 |阅读模式
先看下面的 JSF 页面:
<%...@ page language=\"java\" pageEncoding=\"UTF-8\"%>
<%...@ taglib uri=\"http://java.sun.com/jsf/html\" prefix=\"h\"%>
<%...@ taglib uri=\"http://java.sun.com/jsf/core\" prefix=\"f\"%>
<html>
<head>
  <title>My JSF &#39;login.jsp&#39; 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(\"给老子输用户名!\");
    document.getElementById(\"formLogin:txtUsername\").focus();
    return false;
   }
   if(password == \"\") ...{
    alert(\"不输密码你登录个铲铲!\");
    document.getElementById(\"formLogin:txtPassword\").focus();
    return false;
   }
  }
  </script>
</head>
<body>
  <center>
   <f:view>
    <h:form id=\"formLogin\">
     <div id=\"input\">
      <hutputLabel value=\"用户名:\" />
      <h:inputText value=\"#{LoginManager.username}\" id=\"txtUsername\"
       styleClass=\"formText\" />
      <br>
      <hutputLabel 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(&#39;formLogin&#39;).reset();
       document.getElementById(&#39;formLogin:txtUsername&#39;).focus();\"
       styleClass=\"formButton\" />
     </div>
    </h:form>
   </f:view>
  </center>
</body>
</html>这个页面使用 JavaScript 来确认登录时用户名和密码是否为空,表单名为 formLogin,两个输入组件名为 txtUsername 和 txtPassword,当单击按钮时,将调用 JavaScript 函数 isEmpty(),根据条件判断显示对话框或是提交表单。
要注意的是,不能在 JavaScript 函数中使用如下类似语法来访问表单组件:
document.formLogin.txtUsername.value;
而应使用:
document.getElementById(\"formLogin:txtUsername\").value;
或者:
document.forms.formLogin[\"formLogin:txtUsername\"].value;
这是因为 JSF 解释上面的 <h:form id=\"formForm\">...</h:form> 一段时会生成如下代码:
<form id=\"formLogin\" method=\"post\" action=\"/Project_Blog/login.faces\"
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=\"&#25552;&#20132;\"
   onclick=\"return isEmpty();\" class=\"formButton\" />
  <input type=\"button\" name=\"formLogin:_id3\" value=\"&#37325;&#32622;\"
   onclick=\"javascript:document.getElementById(&#39;formLogin&#39;).reset();
   document.getElementById(&#39;formLogin:txtUsername&#39;).focus();\" class=\"formButton\" />

</div>
<input type=\"hidden\" name=\"formLogin\" value=\"formLogin\" />
</form>JSF 产生的所有表单控件都有符合 formName:componentName 格式的名称,这里的 formName 表示控件的表单的名称,而 componentName 表示组件名称。如果没有指定 id 属性,则 JSF 框架会自动创建标识符,就象上面的 HTML 片段中的按钮一样。因此,要访问上面的用户名字段,必须使用下列方法:
document.getElementById(\"formLogin:txtUsername\").value;【[url037$03-20
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-4 08:41 , Processed in 0.119961 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表