java自定义ui_十 自定义UIComponent

这里介绍的是让Component自身负责编码,解码的例子。

我们设置一个简单的组件,一个文本框加一个按钮。

这里我们可以继承已经实现的UIComponent组件UIInput。

package

test;

import

java.io.IOException;

import

java.util.Map;

import

javax.faces.component.UIInput;

import

javax.faces.context.FacesContext;

import

javax.faces.context.ResponseWriter;

继承已经实现UIComponent的UIInput。public class

UITextWithCmd extends UIInput {

private

static final String TEXT = ".text";

private static final String CMD =

".cmd";

//不使用Renderer进行解码

可以设定此组件的解码,编码不使用Renderer。public UITextWithCmd() {

setRendererType(null);

}

//--------编码,生成HTML标签--------------

public void encodeBegin(FacesContext

context)

实现前台表现层的编码。可以编写成HTML或者其他表现层语言。throws

IOException {

ResponseWriter writer =

context.getResponseWriter();

String clientId =

getClientId(context);

encodeTextField(writer, clientId);

encodeCommand(writer, clientId);

}

private void

encodeTextField(ResponseWriter writer,

String clientId) throws IOException {

writer.startElement("input",

this);

writer.writeAttribute("name", clientId + TEXT, null);

//getValue()继承于UIInput

Object value = getValue();

if(value != null) {

writer.writeAttribute("value",

value.toString(), null);

}

String size = (String)

getAttributes().get("size");

if(size != null) {

writer.writeAttribute("size", size, null);

}

writer.endElement("input");

}

private void encodeCommand(ResponseWriter

writer,

String clientId)

throws IOException {

writer.startElement("input",

this);

writer.writeAttribute("type", "submit", null);

writer.writeAttribute("name", clientId + CMD, null);

writer.writeAttribute("value", "submit", null);

writer.endElement("input");

}

实现标签输入值的解码。取得标签的输入值绑定到响应的Bean。// ..........解码,取得标签的输入值...................................

public void decode(FacesContext context) {

Map reqParaMap =

context.getExternalContext().

getRequestParameterMap();

String clientId = getClientId(context);

String submittedValue =

(String)

reqParaMap.get(clientId + TEXT);

setSubmittedValue(submittedValue);

setValid(true);

}

}

在配置文件faces-config.xml中声明自定义组件。

test.TextWithCmd

test.UITextWithCmd

这样,自定义的UIComponent组件就完成了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值