浏览 5252 次
锁定老帖子 主题:JSF标签
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-10-12  


 使用下面的标签用法时要注意一点,只要在页面上显示的标签内容必须嵌套在


 <f:view><f:view>中


1、转换器——转换数据类型或转换显示格式; 


<f:convertNumber minFractionDigits="2"/>
 转换数字类型,minFractionDigits属性设置保留最小的小数位数为2


minFractionDigits属性设置保留最小的小数位数为2


 

 

 

以上是它的一些属性,常用的是比如限制它的小数位数,它是可以四舍五入的哦~p~,当我们使用type时,指定要转换的类型时,通常可以给些货币显示,如 currency 代表(流通)货币的意思

 

<h:outputText value="#{test.number}">
     <f:convertNumber type="currency" maxFractionDigits="2"/>
</h:outputText>

 


日期转换:

<h:outputText value="#{test.date}">
      <f:convertDateTime pattern="yyyy-MM-dd"/>
</h:outputText>

 
 

由上面两种转换得出的结果输出为

注意的是转换的标签要在被转换数据的之间。。。

 

日期转换: 2008-10-12 数字带货币显示:  ¥4.46

 

 

日期年有日期都用小写,月份特殊些,要大写,为了与分钟区别开来,¥符号是指当前系统使用的货币为准 

 

2、

验证器——验证输入组件中的值;

首先看上面的一小段代码。它是要求数值必须是大于10并且小于10000的。属于范围验证

而用法跟要转换的一样要嵌套在被验证的标签之间。。

验证完之后显示的错误消息要用<h:message>来显示。属性for是指来自于哪个验证,一般在被验证上要有id这属性的名字与期对应

<f:validateDoubleRange minimum="10" maximum="10000"/>

<f:validateLength minimum="13"/> 在输入组件值非空时才验证

 

required="true"  ——非空验证

这里验证失败的消息是JSF自带的错误消息,如果要想改变其输出内容要执行下面几步

1)因为它记录的验证信息比较多,所以我们找到默认的消息文件。

 

 

在Web站点下的lib目录里找到jsf-impl.jar包,里面目录中javax.faces/下包含了四个资源文件

以Messages为例打开找到相应的提示错误消息后把内容转换成中文,(需要转换成ACSII码),之后就建立一个默认的文件Message.properties 再建立一个Message_zh_CN.properties文件,把相应要替换的错误消息存入这两资源文件中。

2)配置faces-config.xml文件

在根元素后面加上这样的代码

 

<application>
    <message-bundle>Message</message-bundle>
</application>

 
 

Message为资源文件的文件名

这里要注意的问题是。。。没整理出来,自己都没配置成功。嘿嘿

 

 

 

 3、显示数据,类似于迭带输入,但这里的dataTable可以生成表格。

<h:dataTable/>

下面看一个完整的前台JSP页面的代码


 

需要注意的是:

1.上面的代码都是需要输入显示的,所以必须在<f:view>之间,

2.需要对输出的内容设置“受管Bean”。上面的受管BEAN别名为stu

3.在dataTable后面的属性 value中指定的属性必须是受管Bean中带get的方法。如上面的是getShow()方法

4.在表格中显示的表头为固定格式,所以它要使用到了<f:facet>标签,属性name写死,为header指定为表头

  文字要在其之间嵌套输出标签<outputText>内容写在属性value中

5.如果需要在表格中产生提交事件的必须要在form表单中。。。。。切记!!

 

 

 

 


4、

JSF常用标签

超链接标签-commandLink 注意该标签必须使用监听,否则直接指定action处理器的也报错。。切记!!

 

 


接下来是一次知识的补充,有时候会用得上

一:jsfconverter(自定义消息)

这个上面有总结,只是没配置成功。步骤都一样了。这里就不重复阐述了因为下面第二点也会对自定义消息使用上:)

二: 业务验证消息

1)首先建立一个资源文件. Properties文件。如Message

<application>
    <message-bundle>Message</message-bundle>
</application>

 


 2)在faces-config.xml中配置上面元素


在faces-config.xml中配置上面元素


 

3)在message.properties文件中设置消息文字

error.noequal=\u7528\u6237\u540d\u6216\u5bc6\u7801\u9519\u8bef.
error.haha=\u7528\u6237\u540d.
java.faces.component.UIInput.REQUIRED=haha\: {0}Value is required:).

 

 

javax.faces.component.UIInput.REQUIRED这个为替换原始提示的消息,而上面的error.noequal是自定义的提示消息

4)在页面表单上加上下面代码

<f:view>
<h:form>
<h:message style="color:blue"/><br/>
  用户名:<h:inputText id="username" value="#{userform.username}"/><br/>
密码:<h:inputSecret id="密码" value="#{userform.userpass}" required="true"/>
<h:message for="密码" style="color:blue"/><br/>
<h:commandbutton value="登陆" actionListener="#{userform.login}" action="#{userform.outcome}"/>
</h:form>
</f:view>
 

 

 


这里用户名与密码填写相同我们就让其可以正常登陆,否则就作出两种消息提示,一种是密码非空,二是用户名与密码不一致的提示;

显示验证错误的消息使用标签<h:messages>,显示非空的我们使用<h:message for=”此处为参数显示的值,可中文”>

做好前台页面准备之后就对此处的提交按钮加上ACTION处理器及其监听方法

一个为actionListener=”#{userform.login}”        监听方法

另一个为action=”#{userform.outcom}”               action处理器

//action处理器
public String outcome(){
      return str;
}

public void login(ActionEvent e){
      if(username.equals(userpass)){
           str="success";
      }else{
           //生成业务消息;
           FacesContext context = FacesContext.getCurrentInstance();
           //根据客户端时区,动态选择装载资源文件;
          ResourceBundle bundle = ResourceBundle.getBundle("test",context.getViewRoot().getLocale());
          //根据键名读取消息内容;
         String msg = bundle.getString("error.noequal");
         String msg2 = bundle.getString("error.haha");
         //生成消息对象,并存储到FacesContext中;
         context.addMessage("error.noequal",new FacesMessage(msg));
         context.addMessage("error.haha",new FacesMessage(msg2));
         str = "fail";
 }
}
 

 

 

 


最后提交的时候根据业务判断跳转的页面为success导航规则中显示成功登陆,而fail则是跳回本页面显示消息

import javax.faces.context.FacesContext;
import java.util.ResourceBundle;
import javax.faces.application.FacesMessage;
 

 

 


注意上面使用到的包

主要思路是通过Util包的ResourceBundle类对象先找到资源文件,然后获得facesContext上下文,并从资源文件中获取的消息存放在facesMessage对象中并保存在上下文中方便页面调用显示

 

三:JSF自定义验证、

1、 UIInput 标记提供了validator 属性

 下面的是邮箱验证才是自定的,所用使用到了validator属性,指定了自定义的验证方法email

<f:view>
<h:form>
用户名:<h:inputText id="username" value="#{userform.username}" required="true"/>
<h:message for="username" style="color:red"/>
<br/>
邮箱:<h:inputText validator="#{userform.emailValidate}" id="email" value="#{userform.email}" required="true"/>
<h:message for="email" style="color:red"/>
<br/>
</h:form>
</f:view>
 

 

 


接下来就是对受管Bean进行上面的自定义方法的实现了直接为你的后台bean 添加一个验证方法。

public void emailValidate(FacesContext context,UIComponent component,Object value) throws ValidatorException{
        String xemail = (String)value;
//判断Email 是否合法;
       if(xemail.indexOf("@")<0){
             throw new ValidatorException{
                   MessageFactory.getMessage(context,"error.email")
             }
       }
}
 

 


 验证方法必须符合下面的原型特征:名字可以自定义,但参数及抛异常得必须的。只要不符合要求即生成一个异常即可

throw new ValidatorException(MessageFactory.

getMessage(context, “error.email"));此处的error.email 就是资源文件的键名

 

 


四:使用jsp内置对象

这里使用的内置对象一般是指request、session之类的

1.    例子:通过超链接传递参数(使用内置对象)

<f:view>
 <h:form>
  <h:commandLink value="分页显示" actionListener="#{userform.processpage}">
       <f:param value="2" name="page"/>
  </h:commandLink>
</h:form>
</f:view>
 

 

 


这里使用到的就像我们原来使用超链接xxx.jsp?id=2形式

而在这个受管Bean中写上刚才的监听方法

使用到的类为

import java.util.Map;
import javax.faces.context.FacesContext;
 

//接收超链接参数;
public void processpage(ActionEvent e){
    Map map= FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
    String page= (String)map.get("page");
    System.out.println("page=" + page);
}
 

 

 


也可以使用以下方法去获取,因为那样更好理解

//接收超链接参数;
public void processpage(ActionEvent e){
    HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
    String page= (String)request.getParameter("page");
    System.out.println("page=" + page);
}
 

 

 


同样的想获取什么并且想存入什么值,只要通过FacesContext.getCurrenInstance().getExternalContext再点的方法都可以获取Servlet的常用对象进行进一步的操作:)

  • 大小: 7.7 KB
  • 大小: 12.4 KB
  • 大小: 5 KB
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics