【问题标题】:Only one getter works on the page after uploading to the server上传到服务器后,只有一个 getter 在页面上工作
【发布时间】:2014-04-05 11:54:53
【问题描述】:

我有一个使用 Struts2 框架的网站。它在我的本地计算机上运行良好,但是当我将它上传到远程服务器(托管)时,一些 getter 和 setter 变得没有调用。 例如:

动作:ForecastAction.java

JSP:forecast.jsp

这是forecast.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 日值。在我看来,这些属性之间没有区别,但struts只显示一天。我检查过,该操作(在远程服务器上)计算所有值,因此变量不为空。问题是 getter 不是由 struts 调用的。

在我的应用程序的其他操作中观察到相同的问题:setter setPassword() 不起作用,但 setLogin() 在授权操作中可以正常工作。 (它只有两个 setter)。

更新:

当我像这样在 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

/UDP

你能帮我吗,有什么问题吗?

也许需要下一个文件:

这是我的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>

【问题讨论】:

  • 在您的操作中将 getMonth 更改为 System.out.println("询问月份 "+month);您将在输出中看到什么。你会在那里看到正确的月份吗?!
  • 谢谢大家的关注,当我改成"System.out.println("求月"+month);"没有什么变化。方法 getMonth 没有被调用。
  • 当我像这样在 jsp 中更改日期和月份时:&lt;s:property value="%{#day}"/&gt; &lt;s:property value="%{#month}"/&gt; 我开始正确地看到工作日。看来,struts 只显示了他喜欢的第一个属性:) 仅此而已。
  • 这看起来很奇怪!!如果你先切换 s:properties &lt;span&gt;&lt;s:property value="month" /&gt;&lt;/span&gt; 和第二个 &lt;span&gt;&lt;s:property value="day" /&gt;&lt;/span&gt; 会发生什么
  • 很奇怪!我只会看一个月。我已将 StackTrace 添加到第一条消息中。

标签: java jsp tomcat struts2 getter


【解决方案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

我建议你将你的 struts 升级到最新版本

【讨论】:

  • 你使用的服务器是什么?
猜你喜欢
  • 2013-05-15
  • 1970-01-01
  • 1970-01-01
  • 2013-08-12
  • 1970-01-01
  • 2016-08-08
  • 1970-01-01
  • 1970-01-01
  • 2014-07-10
相关资源
最近更新 更多