<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标签了 :)