struts2 相关问题

Apache Struts 2是一个基于servlet的可扩展框架,在其架构中实现了模型 - 视图 - 控制器(MVC)模式,用于创建企业级Java Web应用程序。

Struts 2 中的开关动作

我正在使用Struts,在我的项目中我有2个模块(管理员,用户)“管理员”有不同的操作,例如添加用户,删除用户,添加项目,删除用户和“用户&q...

回答 1 投票 0

struts.xml中Struts默认的包名是什么?

我创建了一个名为 RegesterAction 的新类,但我没有将该类保留在任何包中。如何在 struts.xml 中配置此类? 下面是struts.xml文件,但我无法理解......

回答 3 投票 0

使用 Struts 2 和约定插件的全局结果

我希望在我的应用程序中获得一些全局结果。在良好的旧 XML 配置中,它看起来像: 我希望在我的申请中获得一些全局结果。在良好的旧 XML 配置中,它看起来像: <global-results> <result name="error" type="redirectAction"> <param name="actionName">index</param> <param name="namespace">/</param> </result> </global-results> 但是当我使用约定插件时,XML 中的全局结果似乎被忽略,那么我如何使用约定插件来实现这一点呢?我不想让我的所有操作类都扩展定义了这些全局结果的自定义类。我认为 package-info.java 应该是我的朋友,但我所能定义的与结果有关的就是 @org.apache.struts2.convention.annotation.ResultPath。 只是为了澄清:我不想避免 struts.xml 配置 - 我只想有一些有效的全局转发,因此如果任何操作出现错误,我想将用户转发到中央错误页面。目前这不适用于我的配置。如果您在我的struts.xml或我的操作中看到问题并可以帮助我解决它那就完美了。 也许struts.xml中的顺序很重要?这是我的struts.xml的结构: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.devMode" value="false" /> <constant name="struts.convention.result.path" value="/content/"/> <constant name="struts.convention.default.parent.package" value="my-package"/> <constant name="struts.convention.package.locators.disable" value="true"/> <constant name="struts.convention.action.packages" value="..."/> <constant name="struts.custom.i18n.resources" value="global" /> <constant name="struts.multipart.maxSize" value="10485760" /> <package name="my-package" extends="struts-default,json-default" namespace="/"> <result-types> <result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult"/> </result-types> <interceptors> <interceptor name="login" class="loginInterceptor" /> <interceptor name="pagetitle" class="pagetitleInterceptor"></interceptor> <interceptor-stack name="secureStack"> ... </interceptor-stack> <interceptor-stack name="insecureStack"> ... </interceptor-stack> </interceptors> <default-interceptor-ref name="secureStack" /> <global-results> <result name="error" type="redirectAction"> <param name="actionName">index</param> <param name="namespace">/</param> </result> </global-results> </package> </struts> 在我的行动中我有: public class MyActionClass extends ActionSupport { @Actions({ @Action(value = "my-action", results = { @Result(name = "success", type = "tiles", location = "my.location") }) }) public final String myAction() throws Exception { return ERROR; } } 当然myAction还有更多功能——这只是为了说明。当执行该操作时,它会转发到 my-action.jsp 而不使用图块,但我希望它转发到 /index.action。 不幸的是,您无法使用约定插件在包上定义 Result 或 Results 注释。您必须在 xml 配置中定义全局结果,并且它们不会被忽略,因为无论您使用哪个配置提供程序,都会定义运行时配置。解决方法是在基类上定义 Result 或 Results。 您正在 package 中定义 global-result。这些类型的结果(全局)仅对于定义它们的包来说是全局的。因此,只有那些也在同一包中声明的actions才能访问这些global-result。您面前有两个选择: XML 配置: 如何在 XML 配置中执行此操作非常明显(只需将它们定义在同一个包中): <package name="my-package" extends="struts-default,json-default" namespace="/"> <!-- This result is local to this action --> <action name="someAction"class="com.example.SomeAction" method="execute"> <result name="someLocalResult">/localResult.jsp</result> </action> . . . <global-results> <!--This result is global **to the actions in my-package** --> <result name="error" type="redirectAction"> <param name="actionName">index</param> <param name="namespace">/</param> </result> </global-results> </package> 约定插件: 因此,如果您使用约定插件仅将您的 java 类标记为 actions,那么您并没有为它们定义一个包(它们将属于默认包)。为此,您可以使用注释 @ParentPackage 告诉框架这个 action 属于这个包并且可以使用它的 global-result。 为了实现这一点,你的 java 类应该如下所示: @ParentPackage(value="my-pacakge") public class MyActionClass extends ActionSupport { @Actions({ @Action(value = "my-action", results = { @Result(name = "success", type = "tiles", location = "my.location") }) }) public final String myAction() throws Exception { return ERROR; } } 您的 struts.xml 将保持不变: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="my-package" extends="struts-default,json-default" namespace="/"> . . . <global-results> <result name="error" type="redirectAction"> <param name="actionName">index</param> <param name="namespace">/</param> </result> </global-results> </package> </struts> 摆脱设置每个操作的 @ParentPackage 的类似替代解决方案是将操作默认包设置为您最喜欢的包(此处为包含 global-result 的包)。只需将此常量元素添加到您的 struts.xml(在 <struts> 内部)即可: <constant name="struts.convention.default.parent.package" value="my-package"/> 这里有一个关于@ParentPackage的有用链接: 来自apache的@ParentPackage注释 关于:约定插件文档: 从2.1.7开始,使用注解定义的全局结果(在类级别定义)将被继承。 所以对我来说,我可以有一个基本动作,我的所有动作都可以扩展,然后我就有一个全局结果。另一个想法是 package-info.java。 同一份文件说: Convention 插件允许操作类为操作定义不同的结果。结果分为两类:全局和局部。 全局结果在操作类中定义的所有操作之间共享。这些结果被定义为操作类的注释。本地结果仅适用于定义它们的操作方法。 这是不同类型结果注释的示例` 所以我认为它们与标准的 Local Result 和 Global Result 是不同的概念。 标准支柱: 全局结果对于包中定义的每个Action/Interceptor都是可见的; 本地结果仅对该操作可见(但如果通过动态方法调用调用,则对所有方法可见); 如果该方法包含在 struts.xml 中的 Action 标记中,则本地结果仅对该 Action 和方法可见(那么同一 Action 类和不同方法将有多个操作标记)。 我认为对于约定,全局是(2.),本地是(3.)它们都是操作的本地,但是全局可以从每个方法返回,而本地只能从定义它的特定方法返回。

回答 3 投票 0

Struts 2 与 Apache Shiro 集成时如何显示结果页面

使用: struts2 2.5.10, 春天 4.x, struts2-spring-插件2.5.10, 希罗1.4.0, Shiro-Spring 1.4.0。 网络.xml: 使用: struts2 2.5.10, 春季 4.x, struts2-spring-插件2.5.10, 四郎1.4.0, shiro-spring 1.4.0. web.xml: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <display-name>Archetype Created Web Application</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:beans.xml</param-value> </context-param> <filter> <filter-name>shiroFilter</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> <init-param> <param-name>targetFilterLifecycle</param-name> <param-value>true</param-value> </init-param> </filter> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <!-- shiro filter mapping has to be first --> <filter-mapping> <filter-name>shiroFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> <dispatcher>ERROR</dispatcher> </filter-mapping> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app> beanx.xml: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd "> <bean name="loginAction" class="example.shiro.action.LoginAction" > </bean> <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <property name="securityManager" ref="securityManager" /> <property name="loginUrl" value="/login.jsp" /> <property name="filterChainDefinitions"> <value> /login.jsp = authc /logout = logout /* = authc </value> </property> </bean> <bean id="iniRealm" class="org.apache.shiro.realm.text.IniRealm"> <property name="resourcePath" value="classpath:shiro.ini" /> </bean> <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> <property name="realm" ref="iniRealm" /> </bean> <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/> </beans> 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" /> <package name="default" extends="struts-default"> <action name="list" class="loginAction" method="list"> <result name="success">/success.jsp</result> <result name="error">error.jsp</result> </action> </package> </struts> index.jsp: <body> <s:action name="list" /> </body> login.jsp 看起来像: <form name="loginform" action="" method="post"> <table align="left" border="0" cellspacing="0" cellpadding="3"> <tr> <td>Username:</td> <td><input type="text" name="username" maxlength="30"></td> </tr> <tr> <td>Password:</td> <td><input type="password" name="password" maxlength="30"></td> </tr> <tr> <td colspan="2" align="left"><input type="checkbox" name="rememberMe"><font size="2">Remember Me</font></td> </tr> <tr> <td colspan="2" align="right"><input type="submit" name="submit" value="Login"></td> </tr> </table> </form> LoginAction.list(): public String list() { Subject currentUser = SecurityUtils.getSubject(); if(currentUser.isAuthenticated()) {System.out.println("user : "+currentUser.getPrincipal()); System.out.println("You are authenticated!"); } else { System.out.println("Hey hacker, hands up!"); } return "success"; } shiro.ini: [users] root=123,admin guest=456,guest frank=789,roleA,roleB # role name=permission1,permission2,..,permissionN [roles] admin=* roleA=lightsaber:* roleB=winnebago:drive:eagle5 index.jsp、login.jsp、success.jsp放在webapp下 我想要的是:输入LoginAction.list()需要进行身份验证,如果登录成功,则运行LoginAction.list()并返回"success"然后显示定义为Struts操作结果的success.jsp。 现在登录成功后可以执行LoginAction.list(),但是success.jsp不显示,浏览器是空白页面。 为什么? 我找到了原因:我在index.jsp中使用了<s:action name="list" />,但是struts文档说如果我们想用<s:action>看到结果页面,那么我们必须将其属性executeResult设置为true,即就像<s:action name="list" executeResult="true"/>。 在我看来,这有点奇怪,这个属性默认应该是 true。 有一个示例,您应该如何使用 Shiro applicationContext.xml 进行配置: <property name="filterChainDefinitions"> <value> # some example chain definitions: /admin/** = authc, roles[admin] /** = authc # more URL-to-FilterChain definitions here </value> </property> 以 /admin/ 开头的 URL 通过角色 admin 进行保护,任何其他 URL 均不受保护。如果 Struts 操作和结果 JSP 不在受保护区域中,则会显示它们。

回答 2 投票 0

在 Struts 2 中的 execAndWait 拦截器中不重定向 wait.jsp 页面 2

当请求花费太多时间来编写 HTML 文件时,我想在我的页面上放置处理栏。所以我在 Strust2 中使用了 execAndWait 拦截器,但是页面无法在 wait.jsp 上重定向。 强...

回答 2 投票 0

在 Struts 2 + Tomcat 7 中使用 Eclipse Kepler 时出现资源不可用错误

好吧,这是我用 Java 编写的第一个应用程序,也是我第一次使用 Eclipse Kepler、Tomcat 7 和 Struts2,所以我很惊讶我竟然能走到这一步,因为我只知道 JS 和 Rails。无论如何,这个b...

回答 2 投票 0

struts如何使用intercept()的返回类型?

我无法理解intercept()的返回类型背后的概念。它是否与actionInvocationInstance.invoke()的返回类型有关。

回答 2 投票 0

从Struts 2.5升级到Struts 6问题

升级到 Struts 6.3.0.2 后,此 Ajax 调用不起作用。我已经在 pom.xml 中包含了 JQuery 插件。我认为问题是 sj:div。非常感谢对此的任何帮助 <%@ page contentTy...

回答 1 投票 0

Struts 2 到 Struts 6 迁移

Struts 2.5.34 到 Struts 6.3 迁移 目前我们的应用程序是 struts 2.5.3 版本。 随着 Apache 宣布停产,我们正在使用官方 migra 升级到 Struts 6(确切地说是 6.3)...

回答 1 投票 0

如何使用 jQuery 将 JSON 数据发布到 Struts2 Action 类

我在将数据从 jQuery 发送到 struts2 操作类时遇到问题。 我已经看到了这个问题:JSON Jquery to Struts2 action 但我不太了解解决方案。 这是我的问题: json

回答 3 投票 0

Struts2 没有为与上下文路径关联的命名空间 [/] 和操作名称 [索引] 映射操作

这个问题之前已经问过很多次了,但和这个不太一样。一切似乎都在正确的位置上。我正在使用 Java8、Eclipse、Maven、Struts2 w/ Convention Plugin、Spring...

回答 1 投票 0

Struts2默认拦截器列表

我找不到defaultStack中使用的拦截器列表。当我使用 defaultStack 时,我的应用程序可以工作,但我不想拥有所有拦截器,只想要我需要的拦截器(就像我不想要 CSP

回答 1 投票 0

如何从json对象中获取数据并迭代值并将其显示在jsp页面中

我是编程新手。我一直在使用 struts2,我有一个返回 json 数据的操作类方法,它是一个嵌套对象的数组。 我想获取这些数据并迭代我...

回答 1 投票 0

如何从 Struts 2 中的 Action 名称列表中获取请求类型(GET 或 POST)? [重复]

我想获取我的应用程序中存在的所有 struts 操作的所有 POST/GET 请求类型。 我使用了 struts2-config-browser-plugin 并获取了整个应用程序中的所有操作名称。 现在,我

回答 1 投票 0

Struts2传递变量案例

我正在使用Datatables服务器端ajax分页,需要将一些变量传递到服务器。 我的服务器正在运行 Struts2 操作来处理此数据表请求。 我面临一些问题,因为

回答 3 投票 0

如何在Struts 2中测试bean属性?

我有一堂这样的课: 公共类 Foo { 公共布尔 isValid() { 返回假; } } 在我的 JSP 文件中,我想在测试条件下使用 isValid 方法: 我有一堂这样的课: public class Foo { public boolean isValid() { return false; } } 在我的 JSP 文件中,我想在测试条件下使用 isValid 方法: <s:bean name="com.Foo" var="bar"></s:bean> <s:if test="%{bar.valid == false}"> <p>hello</p> </s:if> 但它不起作用。我做错了什么? 上下文变量由 # 引用,但您使用了不带数字符号的名称 bar。 <s:if test="%{#bar.valid == false}"> <p>hello</p> </s:if> 查看 OGNL 语言指南的变量参考。 OGNL 有一个简单的变量方案,它可以让你存储中间值 结果并再次使用它们,或者只是命名事物来表达 更容易理解。 OGNL 中的所有变量对于整个系统来说都是全局的 表达。您可以在变量前面使用数字符号来引用变量 它的名字,像这样: #var

回答 1 投票 0

Struts 2 动态变量

我正在尝试使用 set 标签在 Struts2 中创建动态变量 编号...

回答 2 投票 0

如何使用 OGNL 调用操作方法

如何使用 OGNL 调用操作方法? helloAction.java 公共字符串 getQuote() { return "别想,只要做"; } 成功.jsp 引用(): 如何使用 OGNL 调用操作方法? helloAction.java public String getQuote() { return "Don't think, just do"; } success.jsp <b>quote() :</b> <s:property value="quote()"/> <br> struts.xml <action name="greet" class="com.struts2.helloAction" > <interceptor-ref name="firewallStack"></interceptor-ref> <result name="SUCCESS">/WEB-INF/resources/success.jsp</result> <result name="input">/WEB-INF/resources/success.jsp</result> </action> 我从 struts 2 OGNL 获得了参考链接 这个quote()方法没有被调用。我正在使用 xwork-2.0.1.jar 和 ognl-2.6.11.jar。 你原来的语法几乎是正确的——只需去掉括号即可。 <s:property value="%{quote}" /> JavaBean 争用比显式方法调用更通用,例如,使用 JSP EL: ${quote} 当函数不带参数时,首选 JavaBean 约定。 这个 quote() 方法没有被调用。我正在使用 xwork-2.0.1.jar 和 ognl-2.6.11.jar。 你的行动中没有这种方法。如果你创建它: public String quote() { 并使用正常的 OGNL 方法调用语法: <s:property value="%{quote()}" /> 然后就会根据需要调用。 有关详细信息和语法,您可以阅读OGNL语言指南。

回答 2 投票 0

为什么升级到 Struts 6.3.0.2 后,Struts 标签中的转义不起作用

如果我有如下的 Struts 2 标签 结果应该...

回答 1 投票 0

Struts 响应原始字符串

我有一个 Struts 项目,我需要将响应作为原始字符串发送 struts.xml: <

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.