首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

struts2中用%{}给自定义标签的属性赋值时 为什么不能返回值解决思路

2011-12-31 
struts2中用%{}给自定义标签的属性赋值时 为什么不能返回值测试了一个自定义标签自定义标签java文件如下:p

struts2中用%{}给自定义标签的属性赋值时 为什么不能返回值
测试了一个自定义标签
自定义标签java文件如下:
public class TestTag extends BodyTagSupport {

  private static final long serialVersionUID = 1L;
  private String cpage;
  private String tpage;
  public String getCpage() {
return cpage;
}
public void setCpage(String cpage) {
this.cpage = cpage;
}
public String getTpage() {
return tpage;
}
public void setTpage(String tpage) {
this.tpage = tpage;
}
@Override
  public int doEndTag() throws JspException {
  JspWriter out = pageContext.getOut();
  try {
  String str = "this is tag test!"+ "cpage=" + cpage + "tpage"+ tpage;
  out.println(str);
  } catch (Exception ex) {
  throw new JspTagException("IOException:" + ex);
  }
  return super.doEndTag();
  }
  @Override
  public int doStartTag() throws JspException {
  return SKIP_BODY;
  }
}

标签配制文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib
  PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
  "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
  <tlib-version>1.3</tlib-version>
  <jsp-version>1.2</jsp-version>
  <short-name>testTag</short-name>
  <uri>http://jakarta.apache.org/struts/tags-bean</uri>
  <tag>
  <name>test</name>
  <tagclass>example.TestTag</tagclass>  
  <bodycontent>empty</bodycontent>
  <attribute>
  <name>cpage</name>
  <required>true</required>
  <rtexprvalue>true</rtexprvalue>
  </attribute>
  <attribute>
  <name>tpage</name>
  <required>true</required>
  <rtexprvalue>true</rtexprvalue>
  </attribute>
  </tag>
</taglib>

测试文件
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib prefix="t" uri="/WEB-INF/testTag.tld" %>
<html>
<head>
  <title><s:text name="HelloWorld.message"/></title>
</head>

<body>
<h2><s:property value="message"/></h2>

<h3>Languages</h3>
<t:test cpage="%{cpage}" tpage="%{tpage}"/>
<s:property value="%{cpage}"/>
<ul>
  <li>
  <s:url id="url" action="HelloWorld">
  <s:param name="request_locale">en</s:param>
  </s:url>
  <s:a href="%{url}">English</s:a>
  </li>
  <li>
  <s:url id="url" action="HelloWorld">
  <s:param name="request_locale">es</s:param>
  </s:url>
  <s:a href="%{url}">Espanol</s:a>
  </li>
</ul>

</body>
</html>


这里<t:test cpage="%{cpage}" tpage="%{tpage}"/>的cpage,tpage为action里定义的两个属性,类型为string且都赋了初值,测试下来,


测试结果如下:
Struts is up and running ...
Languages
this is tag test!cpage=%{#cpage}tpage%{tpage} 23 
English 
Espanol 
为什么 cpage和tpage值没有出来,23是<s:property value="%{cpage}"/>这个标签的值。

[解决办法]
%表明是字符串的时候使用
#相当于ActionContext.getContext()
struts2.0不能用el表达式
一般用#{}
字符串用%{#xxxxx}

[解决办法]
如果cpage已经放入值栈,应该直接使用#号:
#cpage
[解决办法]
<t:test cpage="<s:property value="%{cpage}"/>" tpage="<s:property value="%{tpage}"/>"/>

热点排行