jsp:<s:sort comparator="myComparator" source="str">
<s:iterator id="name">
<tr>
<td><s:property value="name"/>
</td>
</tr>
</s:iterator>
</s:sort>myComparator:public class MyComparator implements Comparator<Object> { /**
 * 順序
 */
public int compare(Object o1, Object o2) { int sort = ((String) o1).length() - ((String) o2).length(); return sort;
}
}执行发生以下错误:
致命的: サーブレット jsp のServlet.service()が例外を投げました
javax.servlet.jsp.JspException: comparator [null] does not implements Comparator interface
at org.apache.struts2.views.jsp.iterator.SortIteratorTag.doStartTag(SortIteratorTag.java:137)
at org.apache.jsp.WEB_002dINF.jsp.debug.struts2.tags.DT0013_jsp._jspx_meth_s_005fsort_005f0(DT0013_jsp.java:290)
at org.apache.jsp.WEB_002dINF.jsp.debug.struts2.tags.DT0013_jsp._jspx_meth_s_005fform_005f0(DT0013_jsp.java:179)
at org.apache.jsp.WEB_002dINF.jsp.debug.struts2.tags.DT0013_jsp._jspService(DT0013_jsp.java:90)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
问题:
1>.标签怎样能调用myComparator,是否进行配置。
2>.MyComparator类路径是否有要求。

解决方案 »

  1.   

    是不是少导入了包啊,把 import java.util.Comparator; 导入进去试试呢。
    还有,最好给你的类文件也建立一个包,这样在JSP中导入bean文件时才能准备地找到文件的所在。
    另外,也可以试试在继承接口的时候把 Comparator <Object> 最后的<Object>去掉。不过这个应该不会影响的,只是如果实在找不到错误原因的时候,可以尝试一下
      

  2.   

    给你个参考代码吧,经过测试是正确的,楼主自己再思考思考
    JSP:  <s:bean id="usesort" name="com.idoyu.struts.Sort"></s:bean>
      <table width="200" border="1">
      <s:sort comparator="#usesort" source="{'Spring2.0技术宝典','Ajax实战','Struts权威指南','JSP技术详解','Javascript技术大全'}">
      <s:iterator status="st">
      <tr <s:if test="#st.odd">style="background-color:#bbbbbb"</s:if>>
        <td>
      <s:property/>
      </td>
      </tr>
      </s:iterator>
      </s:sort>
      </table>
      </body>java bean:package com.idoyu.struts;
    import java.util.Comparator;
    public class Sort implements Comparator{
    public int compare(Object o1, Object o2) {
    return o2.toString().length()-o1.toString().length();
    }
    }
      

  3.   

    怎么使用Struts2中的sort标签的id属性
      

  4.   

    <s:bean name="com.cn.sunzhangming.action.generic.controltag.MyComparator" id="myComparator"></s:bean>
    <s:sort comparator="#myComparator" source="{'《Java Web开发详解》','《VC++深入详解》','《Struts 2开发详解》','《Java无难事》'}" id="numbers">
    <ol>
    <s:iterator status="status">
    <li>
    <s:property/>
    </li>
    </s:iterator>
    </ol>
    </s:sort><%
        java.util.Iterator it=(java.util.Iterator)pageContext.getAttribute("numbers");
        out.println(1);
        while(it.hasNext()){
           String number=(String)it.next();
           out.println(number+"<br>");
        }
    %>
      

  5.   

    <s:sort comparator="new com.web.struts.bean.SubComparator()" source="users">
    //1 排序后该集合将被放到ValueStack栈顶,</s:sort>标签闭合后,又回自动从栈顶中移除!
    <s:iterator>  //2 默认迭代ValueStack栈顶集合
    <s:property value="id" />|<s:property value="name" />|<s:property
    value="password" />&nbsp;&nbsp;&nbsp;&nbsp;
    </s:iterator>
    </s:sort>
    //////////////
    <s:bean name="com.web.struts.bean.StrComparator" id="strComparator"></s:bean>
    <s:sort comparator="#strComparator" source="{'aaa','caaa','cccc','bccscs'}">
    <s:iterator>
    <s:property />
    </s:iterator>
    </s:sort>
    //比较器1
    public class SubComparator implements Comparator<UserBean> { public int compare(UserBean o1, UserBean o2) {
    // TODO Auto-generated method stub
    return o1.id - o2.id;
    }}
    //比较器2
    import java.util.Comparator;public class StrComparator implements Comparator<String>{
    public int compare(String o1, String o2) {
    return o1.compareTo(o2);
    }}