2010-11-05 75 views
0

我想创建一个简单的虚拟标签,它可以与Struts2一起使用。Struts2将action的方法结果传递给自定义标记

我有一个动作:

class MyAction extends ActionSupport{ 

    /** 
    Some code 
    */ 
    public Department getRoot(){ 
    /** Some code foes here...*/ 
    return departmentInstance; 
    } 
} 

标签:

<%@tag language="java" pageEncoding="UTF-8" body-content="empty" %> 
<%@ attribute name="tree" required="true"%> 
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="p"%> 
<p:defineObjects /> 
<%@tag import="ejb.model.Department"%><% 
Object attrTree = pageContext.getAttribute("tree"); 
System.out.println("TreeTagHelper->tree=["+attrTree+"]"); 
if(attrTree!=null){ 
    System.out.println("TreeTagHelper->tree.class=["+attrTree.getClass().getName()+"]"); 
}else{ 
    System.out.println("TreeTagHelper->tree.class=[NULL]"); 
} 
try{ 
//some code... 
}catch(Exception e){ 
    System.out.println("Error while drawing tree["+e.getMessage()+"]"); 
} 
%> 

我与标签的jsp:

<%-- pass instance of Department to tag --%>

我有什么做的,如果我想要将MyAction#getRoot的结果传递给我的虚拟标签?

我试着这些:

什么也没有发生,在标签我得到价值root字符串或得到空。

我无法将对象传递给标记属性。

我该怎么做?

回答

1

首先,我强烈建议您避免JSP页面中的scriptlet块。它已经过时很长时间了。使用JSP EL/JSTL(或Struts2中的OGNL)是一种更好的方法。

如果你的动作通过getRoot()方法暴露处,那么你可以将它传递给一个JSP标记为:

<your:jspTag tree="${action.root}"/> 

注:你不可错过OGNL表达式JSP简单标签的方式,你可以一个Struts2标签。

然后,在你的标签假设“树”是指部门:

<%@ tag language="java" pageEncoding="UTF-8" body-content="empty" %> 
<%@ attribute name="tree" required="true" type="ejb.model.Department" %> 
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="p" %> 
<p:defineObjects /> 

${tree.someProperty} 
0

谢谢,我不知道这种方式访问​​操作都:$ {} action.root虽然 等待您的答复,我发现了其他基于jn Struts2的解决方案。

我的解决方案更好,因为它不与struts2紧密结合。 谢谢!

<%@标记语言= “Java” 的的pageEncoding = “UTF-8” 的body-content = “空” %> <%@属性名称= “树” 需要= “真正的” %> <%@ taglib uri =“http://java.sun.com/portlet_2_0”prefix =“p”%> <%@ tag import =“web.tag.TreeTagHelper”%> <%@ tag import =“ejb。 model.Department“%> <%

/** Get value of tag attribute. */ 
    String attrTree = (String)pageContext.getAttribute("tree"); 

    /** Find attribute value in stack*/ 
    Department department = (Department)com.opensymphony.xwork2.ActionContext.getContext().getValueStack().findValue(attrTree); 
    try{ 
     TreeTagHelper tth = new TreeTagHelper(department, out); 
     tth.printTree(); 
    }catch(Exception e){ 
     System.out.println("Error while drawing tree["+e.getMessage()+"]"); 
    } 
%> 
+0

很高兴我能帮到你。 :) – 2010-11-05 22:39:12

相关问题