代码之家  ›  专栏  ›  技术社区  ›  Capacytron

struts2将操作的方法结果传递给自定义标记

  •  0
  • Capacytron  · 技术社区  · 14 年前

    我想创建一个简单的虚拟标记,可以使用struts2。

    我有一个行动:

    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 或者得到空值。

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

    我做错了什么?

    2 回复  |  直到 13 年前
        1
  •  1
  •   Steven Benitez    14 年前

    首先,我强烈建议您避免在JSP页面中使用scriptlet块。它已经被弃用很长时间了。使用jsp el/jstl(或struts2中的ognl)是一种更好的方法。

    如果您的行为通过 getRoot() 方法,然后可以将其传递给JSP标记,如下所示:

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

    注: 不能像传递struts2标记那样将ognl表达式传递给JSP简单标记。

    然后,假设标签中的“tree”指的是部门:

    <%@ 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}
    
        2
  •  0
  •   Capacytron    14 年前

    谢谢,我不知道这样访问操作:$action.root 在等待答复时,我发现了其他基于解决方案的JN Struts2。

    i您的解决方案更好,因为它没有与Struts2紧密耦合。 谢谢您!

    <%@标记语言=“Java”页编码=“UTF-8”正文内容=“空”%gt; <%@attribute name=“tree”required=“true”%> <%@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()+"]");
        }
    %>
    
    推荐文章