struts2 相关问题

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

使用window.open()打开PDF文件

我有一个生成PDF文件并将其存储在/temp文件夹中的方法。我正在使用汤姆猫。我想打开 PDF 文件。我已经在 JavaScript 中使用 window.open() 方法尝试过此操作。但点击...

回答 3 投票 0

使用Struts 2上传图像

我想要做的是使用此 JSP 文件上传图像: <%@ page contentType="text/html; charset=UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> ...

回答 3 投票 0

如何:在 Struts 2 中选择日期、按下按钮、创建文件、下载文件

我想要什么: 如果有人访问该页面,可以选择两个日期并单击(单个)按钮来下载所选两个日期之间的数据。 我已经在工作: JSP/网页开发...

回答 2 投票 0

如何在struts2中使用<s:radio>将<s:set>的值赋给另一个变量

我正在尝试将单选按钮 ans1 的值分配给另一个变量 ans_submit。 问题1...

回答 1 投票 0

在 Struts2 升级到 Struts6..3.2 中,单选按钮选择未保存在前端

我有一些单选按钮,我可以一次选择一个单选按钮并保护它。它被保存在数据库中,但在前端它没有被保存。没有错误。它能够...

回答 1 投票 0

Struts 2 Web 应用程序中的 HTTP 状态 404 和结果 JSP

这是我的设置: 眼镜: 雄猫7.0.109 jdk1.8.0_11 IDEA20232.5 当我输入此操作的“test5_5”方法时,它将重定向到 404 页面。 if(NumberUtils.notNullEquals(结果.getRes...

回答 1 投票 0

Struts2 Web 应用程序和 jsp 中的 HTTP 状态 404

这是我的设置: 眼镜: 雄猫7.0.109 jdk1.8.0_11 IDEA20232.5 当我输入此操作的“test5_5”方法时,它将重定向到 404 页面。 if(NumberUtils.notNullEquals(结果.getRes...

回答 1 投票 0

如何显示所有可用的Struts2动作?

我经常被要求解决 struts.xml 配置错误。现在,在更新到 Struts2 的更高版本后,我自己也遇到了这样的不匹配问题。导致出现以下错误: 没有结果

回答 1 投票 0

为什么我收到错误:没有为操作 [] 和结果输入定义结果?

这是我的 Struts 文件,我在其中映射了所有操作文件 struts.xml: 这是我的 Struts 文件,我在其中映射了所有操作文件 struts.xml: <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="default" extends="struts-default"> <action name="AddTaskAction" class="actions.AddTaskAction" method="post"> <result name="success">/success.jsp</result> <result name="error">/error.jsp</result> </action> <action name="UpdateTaskAction" class="actions.UpdateTaskAction" method="post"> <result name="success">/displayTask.jsp</result> <result name="error">/error.jsp</result> </action> <action name="DeleteTaskAction" class="actions.DeleteTaskAction" method="post"> <result name="success">/displayTask.jsp</result> <result name="error">/error.jsp</result> </action> </package> </struts> 这是Action类文件,我在这里写了关于使用Hibernate的事务、会话将数据插入数据库的内容 AddTaskAction.java: package actions; import org.hibernate.Session; import org.hibernate.Transaction; import com.opensymphony.xwork2.ActionSupport; import helper.FactoryProvider; import model.Task; public class AddTaskAction extends ActionSupport { private Task t = new Task(); public String post() { Session session = FactoryProvider.getFactory().openSession(); Transaction tx = null; try { tx = session.beginTransaction(); session.persist(t); tx.commit(); addActionMessage("Task added successfully!"); return SUCCESS; } catch (Exception e) { if (tx != null && tx.isActive()) { tx.rollback(); } addActionError("Error adding task: " + e.getMessage()); return ERROR; } finally { session.close(); } } public Task getT() { return t; } public void setT(Task t) { this.t = t; } } 在下面的 JSP 页面中,我编写了一段代码来从用户那里获取数据,它将数据重定向到我的操作文件中以插入到数据库中 addTask.jsp: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Add Task</title> </head> <body> <div class="form-container"> <form action="AddTaskAction" method="post"> <div class="form-element"> <label for="name" class="form-label">Task Name</label> <input type="text" id="name" name="t.name" required> </div> <div class="form-element"> <label for="description" class="form-label">Description</label> <input type="text" id="description" name="t.description" required> </div> <div class="form-element"> <label for="due_date" class="form-label">Due Date</label> <input type="text" id="due_date" name="t.due_date" required> </div> <div class="form-element"> <label for="level" class="form-label">Priority Level</label> <input type="text" id="level" name="t.level" required> </div> <div class="form-element"> <label for="status" class="form-label">Status</label> <input type="text" id="status" name="t.status" > </div> <div class="form-submit"> <button type="submit">ADD</button> </div> </form> </div> </body> </html> 我正在尝试使用 Struts2 将数据插入数据库,但结果我经常遇到上述错误 应该配置INPUT结果。 <action name="AddTaskAction" class="actions.AddTaskAction" method="post"> <result name="success">/success.jsp</result> <result name="input">/addTask.jsp</result> <result name="error">/error.jsp</result> </action> 如果您的操作有错误,INPUT结果将由workflow拦截器返回。在执行操作之前,堆栈中的拦截器可能会遇到这些错误。例如,执行验证时可能会出现验证错误,因为堆栈上有一个 validation 拦截器。

回答 1 投票 0

我在 struts 2 中收到此错误“没有为操作操作定义结果。AddTaskAction 和结果输入”

这是我的struts文件,我在其中映射了所有动作文件 struts.xml 这是我的 struts 文件,其中映射了所有操作文件 struts.xml <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="default" extends="struts-default"> <action name="AddTaskAction" class="actions.AddTaskAction" method="post"> <result name="success">/success.jsp</result> <result name="error">/error.jsp</result> </action> <action name="UpdateTaskAction" class="actions.UpdateTaskAction" method="post"> <result name="success">/displayTask.jsp</result> <result name="error">/error.jsp</result> </action> <action name="DeleteTaskAction" class="actions.DeleteTaskAction" method="post"> <result name="success">/displayTask.jsp</result> <result name="error">/error.jsp</result> </action> </package> </struts> 这是 Action 类文件,我在这里写了关于使用 hibernates 事务、会话将数据插入数据库的内容 AddTaskAction.java package actions; import org.hibernate.Session; import org.hibernate.Transaction; import com.opensymphony.xwork2.ActionSupport; import helper.FactoryProvider; import model.Task; public class AddTaskAction extends ActionSupport { private Task t = new Task(); public String post() { Session session = FactoryProvider.getFactory().openSession(); Transaction tx = null; try { tx = session.beginTransaction(); session.persist(t); tx.commit(); addActionMessage("Task added successfully!"); return SUCCESS; } catch (Exception e) { if (tx != null && tx.isActive()) { tx.rollback(); } addActionError("Error adding task: " + e.getMessage()); return ERROR; } finally { session.close(); } } public Task getT() { return t; } public void setT(Task t) { this.t = t; } } In this below jsp page i written a code to take the data from the user and it will redirect the data into my action file to insert into databse addTask.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Add Task</title> </head> <body> <div class="form-container"> <form action="AddTaskAction" method="post"> <div class="form-element"> <label for="name" class="form-label">Task Name</label> <input type="text" id="name" name="t.name" required> </div> <div class="form-element"> <label for="description" class="form-label">Description</label> <input type="text" id="description" name="t.description" required> </div> <div class="form-element"> <label for="due_date" class="form-label">Due Date</label> <input type="text" id="due_date" name="t.due_date" required> </div> <div class="form-element"> <label for="level" class="form-label">Priority Level</label> <input type="text" id="level" name="t.level" required> </div> <div class="form-element"> <label for="status" class="form-label">Status</label> <input type="text" id="status" name="t.status" > </div> <div class="form-submit"> <button type="submit">ADD</button> </div> </form> </div> </body> </html> 我正在尝试使用 struts2 将数据插入数据库,但结果我经常遇到上述错误 应该配置input结果。 <action name="AddTaskAction" class="actions.AddTaskAction" method="post"> <result name="success">/success.jsp</result> <result name="input">/addTask.jsp</result> <result name="error">/error.jsp</result> </action>

回答 1 投票 0

如何从 JSP 调用操作方法并在 Struts 2 中传递参数

我在 JSP 中有以下代码,它将调用操作方法,然后传递参数值。 &l...

回答 1 投票 0

使用struts2(6.3.0.2)将OGNL从3.3.4提升到3.4.2时出错

我的应用程序基于struts2(v 6.3.0.2),我目前使用ognl v3.3.4作为其依赖项之一。该应用程序在这些版本上运行良好。 当我尝试将 OGNL 提升到...

回答 1 投票 0

引起:java.lang.IllegalArgumentException:未知的保留键'_typeConverter'

我在尝试登录 Struts 应用程序时收到以下错误。这是在将我的 Struts 库升级到最新版本后发生的。 请分享任何对我有帮助的信息...

回答 2 投票 0

如何在 Struts 2 中访问 OGNL 跟踪评估?

我被告知要优化网络应用程序。为此,我使用 JProfiler。 我注意到很大一部分响应时间都花在表示层上。特别是当代码构建 HTML 代码时。

回答 2 投票 0

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

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