我有一个使用 Struts2 框架的网站。它在我的本地计算机上运行良好,但是当我将其上传到远程服务器(托管)时,一些 getter 和 setter 变得不调用。
例如:
操作:ForecastAction.java
JSP:预测.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>
...
This is 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 调用的。
在我的应用程序的其他操作中也观察到了同样的问题:settersetPassword()
不起作用,但是setLogin()
在授权操作中工作正常。 (它只有两个设置器)。
UPD:
当我在 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>