Файл «/struts-tags» не найден в Struts 1.3

#java #struts #struts-1

#java #struts #struts-1

Вопрос:

Я написал условный if else тег внутри logic:iterate в jsp, как показано ниже:-

 <s:if test="%{#status=='Scheduling'}">
<td><input type="button" name="Save" enabled="enabled" value="View Log" class="Button" onclick="javascript:update('<bean:write  name="test" property="listName" />','<bean:write name="test" property="testType" />',<bean:write  name="test" property="status" />,this.value)"></td>
</s:if>

<s:elseif test="%{#status=='Running'}">
<td><input type="button" name="Save" enabled="enabled" value="View Log" class="Button" onclick="javascript:update('<bean:write  name="test" property="listName" />','<bean:write name="test" property="testType" />',<bean:write  name="test" property="status" />,this.value)"></td>                
</s:elseif>

<s:else>
<td><input type="button" name="Save" disabled="disabled" value="View Log" class="Button" onclick="javascript:update('<bean:write  name="test" property="listName" />','<bean:write name="test" property="testType" />',<bean:write  name="test" property="status" />,this.value)"></td>                   
</s:else> 
  

Я определил <%@taglib prefix="s" uri="/struts-tags" %> в начале файла jsp, как показано ниже:-

 <%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<%@taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@taglib prefix="s" uri="/struts-tags" %> 
  

Когда я открываю файл jsp, я получаю следующие ошибки. Не могли бы вы помочь мне в решении этой проблемы?

 org.apache.jasper.JasperException: File "/struts-tags" not found
    org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:51)
    org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:409)
    org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:116)
    org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:160)
    org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:429)
    org.apache.jasper.compiler.Parser.parseDirective(Parser.java:492)
    org.apache.jasper.compiler.Parser.parseElements(Parser.java:1439)
    org.apache.jasper.compiler.Parser.parse(Parser.java:137)
    org.apache.jasper.compiler.ParserController.doParse(ParserController.java:255)
    org.apache.jasper.compiler.ParserController.parse(ParserController.java:103)
    org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:170)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:332)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:312)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:299)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:586)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
    org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:455)
    org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279)
    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
    org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
  

Ответ №1:

Вы смешиваете теги Struts 1.3 с тегами Struts 2. Для того, чтобы ваша декларация taglib <%@ taglib prefix="s" uri="/struts-tags" %> была скомпилирована, вы должны включить struts2-core-2.1.6.jar (последнюю версию jar на момент написания) в вашу WEB-INFlib папку, Struts 2 struts-tags.tld находится в разделе (struts2-core-2.1.6.jar META-INF struts-tags.tld).

Имейте в виду, что Struts 2 никогда не будет обратно совместим со Struts 1, поскольку это совершенно новая архитектура, Apache взял новое направление от Struts 1.

Я предлагаю использовать JSTL вместо использования определений taglib Struts 2, поскольку Struts 1.3 хорошо работает с JSTL.

Комментарии:

1. я использую только struts 1.3, я не хочу работать со struts 2, не могли бы вы предложить код для JSTL в этом контексте.

2. @user756993, вы можете использовать <c:if> тег или <c:choose> теги ( <c:when> amp; <c:otherwise> ) для потоков условных тегов.

Ответ №2:

в вашем дескрипторе развертывания это web.xml у вас должно быть объявлено что-то вроде следующего. (не забудьте иметь файлы tld в вашем расположении в этом taglib)

    <jsp-config>
     <taglib>
       <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
       <taglib-location>/WEB-INF/tlds/struts-html.tld</taglib-location>
     </taglib>
   </jsp-config>