Проблема при обновлении до версии 2.5.17. - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь обновить версию Struts с 2.3.35 до 2.5.17, но столкнулся с проблемой, описанной ниже:

java.lang.NullPointerException
    at com.opensymphony.xwork2.util.fs.StrutsJarURLConnection.getInputStream(StrutsJarURLConnection.java:170)
    at com.opensymphony.xwork2.util.fs.JarEntryRevision.needsReloading(JarEntryRevision.java:84)
    at com.opensymphony.xwork2.util.fs.DefaultFileManager.fileNeedsReloading(DefaultFileManager.java:65)
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.needsReload(XmlConfigurationProvider.java:428)
    at org.apache.struts2.config.StrutsXmlConfigurationProvider.needsReload(StrutsXmlConfigurationProvider.java:163)

Я использовал это руководство для перехода на версию 2.5.17 Struts:https://cwiki.apache.org/confluence/display/WW/Struts+2.3+to+2.5+migration

Я подозреваю, что это проблема с плитками.

Я обновил все фляги, связанные со стойками, до версии 2.5.17, включая struts2 -iles-plugin.Я также обновил все фишки, связанные с плитками, до 3.0.7.

Также я удалил банку с ядром Xwork, начиная с версии 2.5, сливаемой в банку с ядрами struts2.

Я делаю что-нибудьнеправильно.

Обратите внимание: на данный момент я не вносил никаких изменений в код.Код прекрасно работает со стойками версии 2.3.35.Но как только я обновил версию Struts вместе с версией тайлов, у меня появилась эта проблема.

Может кто-нибудь подсказать, если я что-то не так делаю?

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Я решил эту проблему, обновив версию Struts до 2.5.18.Он также работал нормально, когда я понизил версию стоек до 2.5.13.

Но не рекомендуется использовать версию стоек между 2.5.16 и 2.3.36 (включительно), поэтому я обновил ее до 2.5.18

0 голосов
/ 26 октября 2018

Да , должны быть ошибки без изменения кода.

Не думаю, что вы что-то делаете неправильно.

После добавления новых .jars и удаления старых он будет работать только тогда, когда код соответствует новой платформе.


Изменения кода будут следующими:

.xml

  1. Добавьте следующее <code> к web.xml.
<filter>
<filter-name>struts2</filter-name>
<filter-class> org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>

<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
</web-app>
Измените struts-config.xml на struts.xml и внесите следующие изменения:

Вы можете полностью удалить struts-config.xml и использовать аннотации вместоXML-файл. (начиная с 2.5.17)

<?xml version="1.0" encoding="ISO-8859-1" ?>        <!-- change to UTF-8 -->
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
"http://struts.apache.org/dtds/struts-config_1_3.dtd "> <!-- change to struts-2.5.dtd -->
<struts-config>                     <!-- change to <struts>  -->
<!-- add <include file="struts-default.xml"/> -->
<form-beans>
<form-bean name="MyClassForm" type="forms.MyClassForm">
</form-bean>
</form-beans>

<action-mappings>       <!-- change to <package name="hello-default" extends="struts-default"> -->
<action path="/MyClass" name="MyClassForm" type="actions.MyClassAction"
validate="false">
<action name = “MyClass” class = “actions.MyClass”>
<forward name="success" path="/Index.jsp"/>
<result> /Index.jsp </result>
</action>
</action>
</action-mappings>          <!-- change to  </package> -->
<message-resources parameter="resources"/>
</struts-config>                <!-- change to  </struts> -->

.java

Удалите файлы ActionForm.java.

Свойства включены в класс ActionSupport, который должен расширять наш класс Action.

Изменить Action.java

import javax.servlet.http.*;
import org.apache.struts.action.*;

public class MyClassAction extends Action // change to ActionSupport {  
//fields are now a property of the ActionSupport class  

public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {

// change to public String execute() throws Exception {

MyClassForm input = (MyClassForm) form; // don't need this
input.setField1(“Hello”);    // change to setMessage(“Hello”);
return mapping.findForward(“success”);    // change to return Action.SUCCESS;

.jsp

Действия, которые должны быть выполнены в этом JSP:

  • Заменить директиву <%@ taglib %>
  • Использовать новый набор тегов, определенных struts-tags.tld
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <html>
    <head>
    <title>Hello!</title>
    </head>
    <s:form action="submit.action" method="post">
    <body>
    <s:textfield label="Name" name=" field1" />
    <s:property value="field1"/>
    <s:submit" />
    </body>
    </s:form>
    </html>

Приветствия.

...