JSF Gossip: 自订转换器

除了使用标准的转换器之外,您还可以自行定制您的转换器,您可以实作 javax.faces.convert.Converter 介面,这个介面有两个要实作的方法:

 public Object getAsObject(FacesContext context,
                           UIComponent component,
                           String str);
 public String getAsString(FacesContext context,
                           UIComponent component,
                           Object obj);

 
简单的说,第一个方法会接收从客户端经由 HTTP 传来的字串资料,您在第一个方法中将之转换为您的自订物件,这个自订物件将会自动设定给您指定的 Bean 物件;第二个方法就是将从您的 Bean 物件得到的物件转换为字串,如此才能藉由 HTTP 传回给客户端。

直接以一个简单的例子来作说明,假设您有一个 User 类别:

  • User.java

package onlyfun.caterpillar;

public class User {
    private String firstName;
    private String lastName;

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}


这个 User 类别是我们转换器的目标物件,而您有一个 GuestBean 类别:

  • GuestBook.java

package onlyfun.caterpillar;

public class GuestBean {
    private User user;
   
    public void setUser(User user) {
        this.user = user;
    }
   
    public User getUser() {
        return user;
    }
}


这个 Bean 上的属性直接传回或接受 User 型态的参数,我们来实作一个简单的转换器,为 HTTP 字串与 User 物件进行转换:

  • UserConverter.java

package onlyfun.caterpillar;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;

public class UserConverter implements Converter {
    public Object getAsObject(FacesContext context,
                               UIComponent component,
                              String str)
                                 throws ConverterException {
        String[] strs = str.split(",");
       
        User user = new User();
       
        try {
            user.setFirstName(strs[0]);
            user.setLastName(strs[1]);
        }
        catch(Exception e) {
            //
转换错误,简单的丢出例外
            throw new ConverterException();
        }
       
        return user;
    }

    public String getAsString(FacesContext context,
                              UIComponent component,
                              Object obj)
                                 throws ConverterException {
        String firstName = ((User) obj).getFirstName();
         String lastName = ((User) obj).getLastName();
       
        return firstName + "," + lastName;
    }
}


实作完成这个转换器,我们要告诉 JSF 这件事,这是在 faces-config.xml 中完成注册:

  • faces-config.xml

<?xml version="1.0"?>
<!DOCTYPE faces-config PUBLIC
  "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
  "http://java.sun.com/dtd/web-facesconfig_1_0.dtd">

<faces-config>
    <navigation-rule>
        <from-view-id>/*</from-view-id>
        <navigation-case>
            <from-outcome>show</from-outcome>
            <to-view-id>/pages/index.jsp</to-view-id>
        </navigation-case>
    </navigation-rule>
      
    <converter>
        <converter-id>onlyfun.caterpillar.User</converter-id>
        <converter-class>
            onlyfun.caterpillar.UserConverter
        </converter-class>
    </converter>

    <managed-bean>
        <managed-bean-name>guest</managed-bean-name>
        <managed-bean-class>
            onlyfun.caterpillar.GuestBean
        </managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
</faces-config>


注册转换器时,需提供转换器识别( Converter ID )与转换器类别,接下来要在 JSF 页面中使用转换器的话,就是指定所要使用的转换器识别,例如:

  • index.jsp

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@page contentType="text/html;charset=Big5"%>

<f:view>

<html>
<head>
<title>
自订转换器 </title>
</head>
<body>

  Guest
名称是: <b>
           <h:outputText value="#{guest.user}"
                   converter="onlyfun.caterpillar.User"/>
           </b>

    <h:form>
         <h:inputText id="userField"
                     value="#{guest.user}"
                     converter="onlyfun.caterpillar.User"/>
        <h:message for="userField" style="color:red"/>
        <br>
        <h:commandButton value="
送出 " action="show"/>
    </h:form>
</body>
</html>
   
</f:view>


您也可以 <f:converter> 标签并使用 converterId 属性来指定转换器,例如:

 <h:inputText id="userField" value="#{guest.user}">
     <f:converter converterId="onlyfun.caterpillar.User"/>
 </h:inputText>     

 
除了向 JSF 注册转换器之外,还有一个方式可以不用注册,就是直接在 Bean 上提供一个取得转换器的方法,例如:

  • GuestBean.java

package onlyfun.caterpillar;

import javax.faces.convert.Converter;

public class GuestBean {
    private User user;
    private Converter converter = new UserConverter();
   
    public void setUser(User user) {
        this.user = user;
    }
   
    public User getUser() {
        return user;
    }
   
    public Converter getConverter() {
        return converter;
    }
}


之后可以直接结合 JSF Expression Language 来指定转换器:

 <h:inputText id="userField"
     value="#{guest.user}"
     converter="#{guest.converter}"/>



数据治理是确保数据准确性、可靠性、安全性、可用性和完整性的体系和框架。它定义了组织内部如何使用、存储、保护和共享数据的规则和流程。数据治理的重要性随着数字化转型的加速而日益凸显,它能够提高决策效率、增强业务竞争力、降低风险,并促进业务创新。有效的数据治理体系可以确保数据在采集、存储、处理、共享和保护等环节的合规性和有效性。 数据质量管理是数据治理中的关键环节,它涉及数据质量评估、数据清洗、标准化和监控。高质量的数据能够提升业务决策的准确性,优化业务流程,并挖掘潜在的商业价值。随着大数据和人工智能技术的发展,数据质量管理在确保数据准确性和可靠性方面的作用愈发重要。企业需要建立完善的数据质量管理和校验机制,并通过数据清洗和标准化提高数据质量。 数据安全与隐私保护是数据治理中的另一个重要领域。随着数据量的快速增长和互联网技术的迅速发展,数据安全与隐私保护面临前所未有的挑战。企业需要加强数据安全与隐私保护的法律法规和技术手段,采用数据加密、脱敏和备份恢复等技术手段,以及加强培训和教育,提高安全意识和技能水平。 数据流程管理与监控是确保数据质量、提高数据利用率、保护数据安全的重要环节。有效的数据流程管理可以确保数据流程的合规性和高效性,而实时监控则有助于及时发现并解决潜在问题。企业需要设计合理的数据流程架构,制定详细的数据管理流程规范,并运用数据审计和可视化技术手段进行监控。 数据资产管理是将数据视为组织的重要资产,通过有效的管理和利用,为组织带来经济价值。数据资产管理涵盖数据的整个生命周期,包括数据的创建、存储、处理、共享、使用和保护。它面临的挑战包括数据量的快速增长、数据类型的多样化和数据更新的迅速性。组织需要建立完善的数据管理体系,提高数据处理和分析能力,以应对这些挑战。同时,数据资产的分类与评估、共享与使用规范也是数据资产管理的重要组成部分,需要制定合理的标准和规范,确保数据共享的安全性和隐私保护,以及建立合理的利益分配和权益保障机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值