在开发WML时使用标签应该注意的问题

 正常的情况下该标签生成的HTML代码如
<img src="/img/logo.gif" alt="LOGO">
这段代码很显然是不符合WML页面规范的,因为img标签没有关闭,为了保证我们的页面在所有的手机上都可以查看,我们就必须完全遵循WML的规范,在WML页面中要求是
<img src="/img/logo.gif" alt="LOGO"/> (大家注意此处)
但是为什么<html:img标签没有给我们生成关闭的标志呢? 打开ImgTag->BaseHandlerTag的源码一看才明白其中道理,该标签通过一个参数来控制是否生成关闭符号,但是这个参数并不在标签本身来控制,而是通过另外一个标签来控制的,这个标签就是<html:html> 我们必须给这个标签指定一个参数<html:html xhtml="true"> 后,<html:img>或者其他标签才会生成结束符号.

但是问题来了,很显然<html:html>这标签是无法在WML页面中使用,所以现在有两种解决的办法:

第一种: 根据BaseHandlerTag中的源码来看,如下:

    protected boolean isXhtml() {
        String xhtml =
            (String) this.pageContext.getAttribute(Globals.XHTML_KEY, PageContext.PAGE_SCOPE);
       
        if ("true".equalsIgnoreCase(xhtml)) {
            return true;
        } else {
            return false;
        }
    }

我们只要给pageContext设置一个值为true即可,因此我们可以在使用<html:img>标签前执行下面代码:
pageContext.setAttribute(Globals.XHTML_KEY, "true", PageContext.PAGE_SCOPE);

第二种: 重载isXhtml方法,我们重新实现一个标签库的类NewImgTag,让该类扩展ImgTag,代码如下:

/**
 * 图像标签
 * @author liudong
 */
public class NewImgTag extends org.apache.struts.taglib.html.ImgTag {

 protected boolean isXhtml() {
  return true;
 }
}

当然还需要自己新增一个标签库的定义文件,并把struts-html.tld中关于img标签的定义拷贝过来修改一下类的名称即可.

如此便可以在WML中使用img标签了 :)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值