Apache Struts 2是一个基于servlet的可扩展框架,在其架构中实现了模型 - 视图 - 控制器(MVC)模式,用于创建企业级Java Web应用程序。
我不明白作者的这些话:“上下文”,“默认属性”,或“根对象”,“基于上下文”等。 我坚持读这篇文章
如何在 Struts 2 中使用 <s:text> 在错误消息中使用参数?
当我尝试在文本中放入一些动态部分以供 Struts 2 中的 标记使用时,这些部分将被我定义的参数替换。 这是我在文件中写句子的方式。
如何使用Struts2 jQuery插件<sj:submit>按钮?
我有 Struts 2 jQuery 插件 按钮,当我单击该按钮时,它不会像 Struts 按钮那样触发操作类。我需要在点击后保留相同的页面...
如何通过 Ajax POST 请求发送 JSON 数据并从 Struts 2 中的操作接收 JSON 响应?
我试图了解如何在 Struts 2 中使用 JSON,在此过程中,我尝试从 Struts 2 操作获取 JSON 响应并显示该响应的警报。为此,我使用 Ajax POST...
如何在JSP中获取动作结果代码? 我想对所有结果使用相同的 JSP。 公共字符串 doSth() { 返回一个? “好的”:“失败”; }
如何在 Struts 2 中使用包含上下文属性和 <s:a> 标签?
根据文档,我可以使用 includeContext = "false" 来避免实际上下文应包含在 URL 中。 当我使用这条线时: 根据文档,我可以使用 includeContext = "false" 来避免实际上下文应包含在 URL 中。 当我使用这条线时: <s:a action="persist" namespace="books" includeParams="get" includeContext="false" cssClass="btn btn-xs btn-success"> <s:text name="actions.books.edit" /> <s:param name="idBook"><s:property value="id" /></s:param> </s:a> 生成的网址是这样的: http://localhost:8080/ejercicio4-web/books/books/persist.action?idBook=6 但是当前的网址: http://localhost:8080/ejercicio4-web/books/all.action 如果我使用 <s:url> 组件(如果它工作正常): http://localhost:8080/ejercicio4-web/books/persist.action?idBook=6 struts.xml完整配置: <!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.enable.DynamicMethodInvocation" value="false"/> <constant name="struts.devMode" value="true"/> <!-- Use Guice as the ObjectFactory for this application --> <constant name="struts.objectFactory" value="guice" /> <constant name="struts.custom.i18n.resources" value="global" /> <constant name="struts.url.includeParams" value="get" /> <!-- Default App Package --> <package name="app-default" abstract="true" extends="struts-default, tiles-default"> <interceptors> <interceptor name="saveParamsOnSession" class="interceptors.SaveParamsOnSession"/> <interceptor-stack name="secure"> <interceptor-ref name="roles"> <param name="allowedRoles">ADMIN</param> </interceptor-ref> <interceptor-ref name="paramsPrepareParamsStack"/> </interceptor-stack> <interceptor-stack name="storeFlashDataStack"> <interceptor-ref name="store"> <param name="operationMode">STORE</param> </interceptor-ref> <interceptor-ref name="defaultStack" /> </interceptor-stack> <interceptor-stack name="storeParamsPrepareParamsStack"> <interceptor-ref name="store"> <param name="operationMode">STORE</param> </interceptor-ref> <interceptor-ref name="paramsPrepareParamsStack" /> <interceptor-ref name="saveParamsOnSession" /> </interceptor-stack> </interceptors> <global-results> <result name="ejbexception" type="tiles">app.error.ejbexception</result> </global-results> <global-exception-mappings> <exception-mapping exception="javax.ejb.EJBException" result="ejbexception" /> </global-exception-mappings> </package> <!-- Books package --> <package name="books" namespace="/books" extends="app-default"> <!--<default-interceptor-ref name="secure"/>--> <default-action-ref name="home" /> <action name="home" class="actions.BaseAction"> <result type="tiles">app.books.home</result> </action> <!-- persist book --> <action name="persist" class="actions.books.PersistBookAction"> <interceptor-ref name="store"> <param name="operationMode">RETRIEVE</param> </interceptor-ref> <interceptor-ref name="servletConfig" /> <interceptor-ref name="params" /> <interceptor-ref name="prepare" /> <result type="tiles">app.books.persist</result> </action> <action name="proccess" class="actions.books.PersistBookAction" method="proccess"> <interceptor-ref name="storeParamsPrepareParamsStack" /> <interceptor-ref name="fileUpload"> <param name="allowedTypes">application/pdf</param> </interceptor-ref> <exception-mapping exception="java.io.IOException" result="input" /> <result name="input" type="redirectAction">persist.action?idBook=${book.id}</result> <result type="redirectAction">persist.action?idBook=${book.id}</result> </action> <!-- Show Book --> <action name="show" class="actions.books.BookAction"> <interceptor-ref name="paramsPrepareParamsStack" /> <result type="tiles">app.books.show</result> </action> <action name="pdf" class="actions.books.ShowPDFAction"> <interceptor-ref name="basicStack" /> <result name="success" type="stream"> <param name="contentType">application/pdf</param> <param name="inputName">inputStream</param> <param name="contentDisposition">inline;filename="test.pdf"</param> <param name="bufferSize">1024</param> </result> </action> <!-- Remove book --> <action name="remove" class="actions.books.RemoveBookAction"> <interceptor-ref name="store"> <param name="operationMode">STORE</param> </interceptor-ref> <interceptor-ref name="paramsPrepareParamsStack" /> <result name="input" type="redirectAction">all</result> <result type="redirectAction">all</result> </action> <!-- Books list --> <action name="all" class="actions.books.BooksAction"> <interceptor-ref name="storeParamsPrepareParamsStack" /> <result type="tiles">app.books.all</result> </action> </package> <!-- Authors package --> <package name="authors" namespace="/authors" extends="app-default"> <action name="create" class="actions.authors.CreateAuthorAction"> <interceptor-ref name="storeFlashDataStack" /> <result name="input" type="redirectAction">books/persist</result> <result type="redirectAction"> <param name="actionName">persist</param> <param name="namespace">/books</param> </result> </action> </package> <!-- Accounts package --> <package name="accounts" namespace="/accounts" extends="app-default"> <action name="login" class="actions.accounts.SigninAction"> <interceptor-ref name="store"> <param name="operationMode">RETRIEVE</param> </interceptor-ref> <result>/WEB-INF/views/accounts/login.jsp</result> </action> <action name="check" class="actions.accounts.SigninAction" method="check"> <interceptor-ref name="store"> <param name="operationMode">STORE</param> </interceptor-ref> <result name="input" type="redirectAction">login</result> <result type="redirectAction">login</result> </action> <action name="signup" class="actions.accounts.PreCreateUserAction"> <interceptor-ref name="store"> <param name="operationMode">RETRIEVE</param> </interceptor-ref> <result type="tiles">app.accounts.signup</result> <result name="input" type="tiles">app.accounts.signup</result> </action> <action name="create" class="actions.accounts.PostCreateUserAction"> <interceptor-ref name="store"> <param name="operationMode">STORE</param> </interceptor-ref> <interceptor-ref name="fileUpload"> <param name="allowedTypes">image/jpeg,image/jpg,image/png</param> </interceptor-ref> <interceptor-ref name="defaultStack" /> <result name="input" type="redirectAction">signup</result> <result type="redirectAction">signup</result> </action> </package> </struts> 为什么使用 includeContext 属性?你应该删除它 <s:a action="persist" namespace="books" cssClass="btn btn-xs btn-success"> <s:text name="actions.books.edit" /> <s:param name="idBook"><s:property value="id" /></s:param> </s:a> 框架使用 UrlHelper 为所有标签生成 url,因此它们无法预测您如何使用生成的代码。 includeContext 是 Boolean 属性,表示 “URL 中是否应包含实际上下文” 描述 创建 HTML 的标签。该标签支持相同的属性 作为“url”标签,包括使用“param”标签的嵌套参数。 还有你为什么使用includeParams="get"? url 中只有一个参数。
如何在 Struts 2 和 Hibernate 中编辑表中的行?
我无法使用 Struts 2 和 Hibernate 编辑表格。在 Apache 控制台中,我可以看到更新查询已执行,但从表中它只是删除数据,并在尝试插入数据时,
使用 Struts 2 和 Hibernate 编辑行不起作用
我无法使用 Struts 2 和 Hibernate 编辑表格。在 Apache 控制台中,我可以看到更新查询已执行,但从表中它只是删除数据,并在尝试插入数据时,
如何在 Struts 2 中使用 <s:push> 标签作为表单输入字段?
我有两个类,一个是Action类MyAction,另一个是POJO类User。在 MyAction 中,我为 User 类制作了 getter-setter。 然后我有用于用户输入的index.jsp 页面。在此,我使用
我有两个类,一个是Action类MyAction,另一个是POJO类User。在 MyAction 中,我为 User 类制作了 getter-setter。 然后我有用于用户输入的index.jsp 页面。在此,我使用
我正在尝试在 Struts 2 中运行 Web 应用程序示例,但遇到了问题。 这是代码, 网络.xml: 我正在尝试在 Struts 2 中运行 Web 应用程序示例,但遇到了问题。 这是代码, web.xml: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>Struts 2</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> </web-app> index.jsp: <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Hello World</title> </head> <body> <h1>Hello World From Struts2</h1> <form action="abc"> <label for="name">Please enter your name</label><br/> <input type="text" name="name"/> <input type="submit" value="Say Hello"/> </form> </body> </html> 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="helloworld" extends="struts-default namespace="/"> <action name="abc" class="com.junaid1.struts2.HelloWorldAction" method="execute"> <result name="success">HelloWorld.jsp</result> <result name="error">/oops.jsp</result> </action> </package> </struts> HelloWorldAction.java: package com.junaid1.struts2; public class HelloWorldAction{ private String name; public String execute() throws Exception { return "success"; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 当我在 Tomcat 服务器上执行此项目时,它会正常显示 index.jsp 页面。该页面有一个表格。当我按下提交按钮时,它给出一个错误,指出 "the requested resource is not available" 并带有消息 "/test1/abc"。 abc 是操作的名称,并且该操作未被调用。在发布这个问题之前我已经搜索了很多。起初,我以为我可能缺少一些库,但现在对我来说这似乎不是问题,因为我正在使用 Maven 进行依赖管理。 这是我的pom.xml: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>test</groupId> <artifactId>test1</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.3.16</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.14</version> </dependency> </dependencies> </project> 项目结构: 您可以看到索引页面,因为它是由 Web 容器 Tomcat 显示的,并且它没有 Struts 标签(就像任何其他没有 Struts 框架的 Web 项目一样)。 浏览器 URL 显示 /test1/。然后你通过按提交按钮发出请求/test1/abc,它被struts2过滤,但它在命名空间abc和默认命名空间中都找不到名称为/的操作,并且你没有具有该路径的任何资源,因此您会收到 404 错误。 您可能会说在默认命名空间中使用名称 abc 配置了操作。但是这个配置在运行时不可用,包名称也应该是你的包扩展的struts-default。 struts.xml文件应该位于类路径上,这意味着位于src或resources文件夹中。编译时将其复制到编译器输出文件夹。构建后,它将从编译器输出文件夹复制到 WEB-INF/classes。这两个文件夹是临时创建的,可以在该过程之前删除,因此如果源文件夹中没有 struts.xml,那么在运行应用程序时就会丢失此文件。 另请注意,您在结果中使用的 webcontent 文件夹中没有任何 JSP 页面。 首先你应该在web.xml中使用 <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class> 因为 org.apache.struts2.dispatcher.FilterDispatcher 已被弃用。 请看一下这个示例。
我正在尝试在 Struts 2 中运行 Web 应用程序示例,但遇到了问题。 这是代码, 网络.xml: 我正在尝试在 Struts 2 中运行 Web 应用程序示例,但遇到了问题。 这是代码, web.xml: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>Struts 2</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> </web-app> index.jsp: <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Hello World</title> </head> <body> <h1>Hello World From Struts2</h1> <form action="abc"> <label for="name">Please enter your name</label><br/> <input type="text" name="name"/> <input type="submit" value="Say Hello"/> </form> </body> </html> 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="helloworld" extends="struts-default namespace="/"> <action name="abc" class="com.junaid1.struts2.HelloWorldAction" method="execute"> <result name="success">HelloWorld.jsp</result> <result name="error">/oops.jsp</result> </action> </package> </struts> HelloWorldAction.java: package com.junaid1.struts2; public class HelloWorldAction{ private String name; public String execute() throws Exception { return "success"; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 当我在 Tomcat 服务器上执行此项目时,它会正常显示 index.jsp 页面。该页面有一个表格。当我按下提交按钮时,它给出一个错误,指出 "the requested resource is not available" 并带有消息 "/test1/abc"。 abc 是操作的名称,并且该操作未被调用。在发布这个问题之前我已经搜索了很多。起初,我以为我可能缺少一些库,但现在对我来说这似乎不是问题,因为我正在使用 Maven 进行依赖管理。 这是我的pom.xml: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>test</groupId> <artifactId>test1</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.3.16</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.14</version> </dependency> </dependencies> </project> 项目结构: 您可以看到索引页面,因为它是由 Web 容器 Tomcat 显示的,并且它没有 Struts 标签(就像任何其他没有 Struts 框架的 Web 项目一样)。 浏览器 URL 显示 /test1/。然后你通过按提交按钮发出请求/test1/abc,它被struts2过滤,但它在命名空间abc和默认命名空间中都找不到名称为/的操作,并且你没有具有该路径的任何资源,因此您会收到 404 错误。 您可能会说在默认命名空间中使用名称 abc 配置了操作。但是这个配置在运行时不可用,包名称也应该是你的包扩展的struts-default。 struts.xml文件应该位于类路径上,这意味着位于src或resources文件夹中。编译时将其复制到编译器输出文件夹。构建后,它将从编译器输出文件夹复制到 WEB-INF/classes。这两个文件夹是临时创建的,可以在该过程之前删除,因此如果源文件夹中没有 struts.xml,那么在运行应用程序时就会丢失此文件。 另请注意,您在结果中使用的 webcontent 文件夹中没有任何 JSP 页面。 首先你应该在web.xml中使用 <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class> 因为 org.apache.struts2.dispatcher.FilterDispatcher 已被弃用。 请看一下这个示例。
为什么“必填”字段验证器无法处理 Struts 2 中的空白值?
我正在构建一个登录应用程序(在 Netbeans 731 中),它基本上确保用户名和密码的非空值。应用程序运行良好,但验证不起作用,所以即使我...
为什么“必填”字段验证器不能处理 Struts 2 中的空白值?
我正在构建一个登录应用程序(在 Netbeans 731 中),它基本上确保用户名和密码的非空值。应用程序运行良好,但验证不起作用,所以即使我...
我有一个基于Java/Struts/Hibernate的应用程序。它有两种类型的用户:管理员和普通用户。我为角色和操作创建了单独的 Struts 页面。 但是当我在...
将displaytag列设置为单选按钮,value属性不会评估Struts 2中的EL表达式
我在获取与单选按钮(表中的一列)关联的值时遇到问题。它没有返回实际的conferenceid,而是返回${conf.conferenceid...
我有一种情况需要将下拉值设置为只读。 但由于 仅具有禁用属性,如何使 表现为只读? 我有
我有一个 URL=“deliverable.do?id=123” 单击提交按钮后,它会转到 validate() 方法并找到一些缺失的字段。 然后,当它返回显示问题时(这是......
我尝试运行一个简单的 Struts 2 应用程序,它为用户提供了输入操作系统类型和版本的字段,以及一个用于注释的可选字段。然后它将在新页面上显示结果...
我需要在自定义异常抛出的消息之间换行。 我正在使用 Struts 2 addActionError(),错误消息将显示在 JSP 上。 这是我的 Java 代码: 如果(result_Of_S...