gpt4 book ai didi

java - Struts Action 类的子类化

转载 作者:行者123 更新时间:2023-11-30 07:27:36 25 4
gpt4 key购买 nike

如果 Action 类是子类,并且子类不包含“execute”方法,struts 会自动向父类(super class)查找“execute”方法吗?如果action子类的父类是Action本身的子类并且不包含'execute'方法,struts会继续查找层次结构,直到找到包含'execute'方法的父类(super class)? struts 总是首先查找并运行“execute”方法吗?下面是一些代码,希望能够澄清我的问题。

超一流:

public class BaseXHRAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
String page = mapping.getParameter();
String actionName = mapping.getPath();
return mapping.findForward(page);
}
}

子类:

public class OdonohueTestInitXHRAction extends BaseXHRAction {
//this class does not contain an 'execute' method
//it contains some other method(s) below

public ScreenConfigurationRes getResponse(ActionForm form, HttpServletRequest request, Context ctx) throws Exception {
//return ScreenConfigurationRes
}
}

struts-config.xml:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
<form-beans>
<form-bean name="screenConfigurationForm" type="com.saic.ct.sys.presentation.forms.screenconfiguration.ScreenConfigurationForm"/>
<form-beans>

<!-- Global Forwards -->
<global-exceptions>
<exception type="java.lang.Exception" key="Test" path="/errorAction.do"/>
</global-exceptions>
<global-forwards>
<forward name="home" path="/home.do"/>
<forward name="error" path="/errorAction.do"/>
<forward name="logoutError" path="/loginInit.do"/>
</global-forwards>

<!-- Action Mappings -->
<action-mappings>
<action
path="/OdonohueTestInitXHR"
name="screenConfigurationForm"
type="com.saic.ct.sys.presentation.actions.schedule.OdonohueTestInitXHRAction"
parameter="home"/>
</action-mappings>

<controller locale="true"/>

<plug-in className="com.oroad.stxx.plugin.StxxPlugin">
<set-property property="pipeline-config" value="/WEB-INF/stxx-pipelines.xml"/>
</plug-in>

<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
</plug-in>
</struts-config>

最佳答案

execute() 方法被重写。

当 Struts 执行某个操作时,它已经拥有该 Action 的实例。它使用该实例来调用execute()方法。它是一个公共(public)方法。

在 Java 中,所有公共(public)方法都是继承的。如果您的操作没有重写 execute() 方法,那么它会使用继承的方法。否则,如果您有重写的方法并且想要调用其父类(super class)的方法,您可以使用super

即使 Struts 使用 Action 类型来调用 execute() 方法,由于多态性,也会使用操作类的虚拟方法。

当然,它会按照从子类到父类(super class)的顺序在对象类型的层次结构中搜索虚拟方法。这是 Java 的本质,Struts 只是调用 Action 对象的方法。

关于java - Struts Action 类的子类化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36602287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com