На странице после загрузки на сервер работает только один геттер

У меня есть веб-сайт, работающий на платформе Struts2. На моем локальном компьютере он работает нормально, но когда я загрузил его на удаленный сервер (хостинг), некоторые геттеры и сеттеры перестали звонить. Например:

Действие: ForecastAction.java

JSP: прогноз.jsp

Это прогноз.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
...
 <span><s:property value="day" /></span>
 <span><s:property value="month" /></span>
 <span class="week_day"><s:property value="weekday" /></span>
 ...

Это ForecastAction.java

public class ForecastAction extends ActionSupport {

    private  String day, month, weekday;
    ... (other variables)

    public String getDay() {
        System.out.println("Ask for day");
        return day;
    }

    public void setDay(String day) {
        this.day = day;
    }

    public String getMonth() {
        System.out.println("Ask for month");
        return month;
    }

    public void setMonth(String month) {
        this.month = month;
    }

    public String getWeekday() {
        return weekday;
    }

    public void setWeekday(String weekday) {
        this.weekday = weekday;
    }
    ... (other setters and getters)
    public String execute(){
            ... (calculcating parameters)
            return SUCCESS;
    }
}

На моем локальном компьютере я мог видеть все значения (день, месяц и день недели), но удаленный сервер возвращает jsp только значение дня. На мой взгляд разницы между этими свойствами нет, а распорки показывают только день. Я проверил, что действие (на удаленном сервере) вычисляет все значения, поэтому переменные не пустые. Проблема в том, что геттеры не звонят по распоркам.

Та же проблема наблюдалась и в другом действии моего приложения: сеттер setPassword() не работает, а setLogin() в действии авторизации работает нормально. (У него всего два сеттера).

УПД:

Когда я меняю день и месяц в jsp следующим образом:

<span><s:property value="%{#day}"/></span>
<span><s:property value="%{#month}"/></span>

Я начинаю видеть день недели правильно. Кажется, что struts показывает ТОЛЬКО ПЕРВОЕ свойство, которое ему нравится :) И не более того.

JSP Debug:
Struts has detected an unhandled exception:
1.permission can't be null

2.actionErrors

3.Caught an exception while getting the property values of Weather.Action.Public.ForecastAction@749f6da7

4.An exception occurred processing JSP page /forecast.jsp at line 3 1: <%@ page contentType="text/html;charset=UTF-8" language="java" %> 2: <%@ taglib prefix="s" uri="/struts-tags" %> 3: 4: 5: 6: Stacktrace:

Stacktraces

org.apache.jasper.JasperException: An exception occurred processing JSP page /forecast.jsp at line 3 1: <%@ page contentType="text/html;charset=UTF-8" language="java" %> 2: <%@ taglib prefix="s" uri="/struts-tags" %> 3: 4: 5: 6: Stacktrace:
  1)Caught an exception while getting the property values of  Weather.Action.Public.ForecastAction@30aa119a - Class: ognl.ObjectPropertyAccessor File: ObjectPropertyAccessor.java Method: getPossibleProperty Line: 69 - ognl/ObjectPropertyAccessor.java:69:-1
      2)actionErrors - Class: ognl.ObjectPropertyAccessor File:                ObjectPropertyAccessor.java Method: getPossibleProperty Line: 69 - ognl/ObjectPropertyAccessor.java:69:-1
         3)ognl.OgnlException: actionErrors [java.lang.NullPointerException: permission can't be null]
             4)java.lang.NullPointerException: permission can't be null

/УДП

Не могли бы вы мне помочь, что может быть не так?

Возможно, понадобятся следующие файлы:

Это мой struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

<constant name="struts.devMode" value="true" />
<constant name="struts.multipart.maxSize" value="30000000" />

<package name="public" namespace="/" extends="struts-default">
... (other actions)
    <action name="forecast" class="Weather.Action.Public.ForecastAction" method="execute">
        <result name="success">/forecast.jsp</result>
        <result name="error">/Error.jsp</result>
    </action>
... (other actions)
</package>
...(other package)
</struts>

И web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Weather</display-name>
<welcome-file-list>
    <welcome-file>/index.jsp</welcome-file>
</welcome-file-list>

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter- class>
</filter>

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

<servlet>
    <servlet-name>StartTimerServlet</servlet-name>
    <display-name>StartTimerServlet</display-name>
    <servlet-class>Weather.Service.StartTimerServlet</servlet-class>
    <load-on-startup>0</load-on-startup>
</servlet>

</web-app>

person user3262714    schedule 05.04.2014    source источник
comment
в вашем действии измените getMonth на System.out.println (спросите месяц + месяц); Что вы увидите на выходе. Вы увидите там правильный месяц?!   -  person Alireza Fattahi    schedule 05.04.2014
comment
Спасибо за внимание, когда я меняю на System.out.println(Ask for month+month); ничего не меняется. Метод getMonth не вызывается.   -  person user3262714    schedule 06.04.2014
comment
Когда я меняю день и месяц в jsp следующим образом: <s:property value="%{#day}"/> <s:property value="%{#month}"/> я начинаю правильно видеть день недели. Кажется, что struts показывает ТОЛЬКО ПЕРВОЕ свойство, которое ему нравится :) И не более того.   -  person user3262714    schedule 06.04.2014
comment
Это кажется очень странным!! Что произойдет, если вы поменяете местами s:properties сначала <span><s:property value="month" /></span>, а затем <span><s:property value="day" /></span>   -  person Alireza Fattahi    schedule 06.04.2014
comment
Очень странно! Я увижу только месяц. Я добавил StackTrace в первое сообщение.   -  person user3262714    schedule 06.04.2014


Ответы (1)


Это может быть ошибка в struts 2.3.1.1. и OGNL 3.0.3 и некоторые серверы приложений, когда включена безопасность Java

Пожалуйста, посмотри

https://issues.apache.org/jira/browse/OGNL-176

https://issues.apache.org/jira/browse/WW-3746

Я предлагаю вам обновить стойки до последней версии.

person Alireza Fattahi    schedule 06.04.2014
comment
какой сервер вы используете? - person Alireza Fattahi; 07.04.2014