Apache Struts 2是一个基于servlet的可扩展框架,在其架构中实现了模型 - 视图 - 控制器(MVC)模式,用于创建企业级Java Web应用程序。
所请求的资源在 Struts 2 Hello World 中不可用
我在这个例子中遇到了问题。 我使用 Eclipse for Java EE 和 Apache Tomcat 8。 我的项目结构: web.xml代码: <...
我想在我的 Struts 应用程序中使用 jQuery 日期选择器 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix=&quo...
我使用的是Struts 2,我知道Struts根据请求在action中创建声明的bean对象,以便它可供action使用。 我一直在研究了解哪个
我正在使用 Struts 2 实现标签系统。我在数据库中有两个表,博客和标签,使用具有多对多关系的 Hibernate。我已经集成了 JQuery tagEditor。 当我插入单个 v 时...
为什么样式“display:none”不隐藏像<s:textfield>这样的Struts 2标签?
我想知道为什么 标签无法隐藏 Struts 2 标签,我正在使用 ,它应该隐藏在 onLoad 和 onChange 事件中,我正在调用 jQuery 来切换 ... 我想知道为什么 <div> 标签无法隐藏 Struts 2 标签,我正在使用 <div>,它应该隐藏在 onLoad 和 onChange 事件中,我正在调用 jQuery 来切换 <div> 标签: <%@ taglib prefix="s" uri="/struts-tags" %> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <script type="text/javascript" src="js/jquery-1.3.2.min.js"></script> <script type="text/javascript" > $( document ).ready(function() { $("#t").click(function(){ alert("I Know Its Not Working"); $('#tt').toggle(); }); }); </script> </head> <body> <s:form > <div style="display: none;" id="tt"> <s:textfield></s:textfield> </div> </s:form> <input type="button" id="t"> </body> </html> 默认情况下,Struts2 使用 xhtml 主题来生成 textfield 标签等表单字段的 html 内容。该主题使用 <table> 布局,其中 <tr><td> 作为输入元素。这会破坏您的设计,因为这些元素放置在 <div> 标签之外。如果您想在输入字段中使用 <div> 而不是 <tr><td>,那么您可以选择 css_xhtml 主题。如果您想省略生成 <tr><td> 或 <div> 那么您可以使用 simple 主题。例如 <s:form theme="simple"> <div style="display: none;" id="tt"> <s:textfield name="myfield" /> </div> </s:form> 参考资料: 主题和模板 我测试过。 100%为我工作:) <%@ 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>Insert title here</title> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script> $(document).ready(function(){ //jquery methods go here... $("#btnhidediv").change(function(){ $("#togglediv").toggle(); }); }); </script> </head> <body> <form> <div id="togglediv" style="display: none;"> <s:textfield type="text" name="xyz" key="xyz" size="11" label="xyz"></s:textfield><br /> <p>Hieeeeeeeeeee</p> </div> <input type="text" id="btnhidediv"> </form> <body> </html>
如何在Struts 2中替换Struts 1 <nested:root>标签?
我正在将 Struts 1 应用程序转换为 Struts 2。我有一个包含多个 JSP 的 JSP。这包括 JSP 上都带有 标签。 我在...
如何以 JSON 形式返回 ActionErrors、FieldErrors 并使用 AJAX 在表单上显示错误
我想知道是否有人可以对以下内容提出任何想法。 得到一个带有 validate() 方法的 Action 类,当验证失败时,该方法返回带有 actionErrors、fieldErrors 的 JSP 输入结果。 我会...
如何使用Struts 2<s:file>标签将图像文件插入数据库?
我想将图像文件插入到Struts 2应用程序中的数据库中。 我正在使用三个类: 模型类 DAO 类使用准备好的语句插入查询。 动作类 在 JSP 中我使用 &...
如何在 Struts 2 的迭代列表中使用带有 id 的 <s:submit> 按钮?
如何使用 Struts 的 按钮提交迭代列表中对象的特定 id? 如何使用 Struts 的 <s:submit> 按钮提交迭代列表中对象的特定 id? <s:form action="actionDeleteBooking"> <s:iterator var = "bookingList" value="bookings"> <s:submit label="delete booking" value = "cancel booking" theme = "simple" id="bookingid" /> </s:iterator> </s:form> 我可以为单选按钮做到这一点: <s:form action="actionConfirmBooking"> <s:iterator var = "pathList" value="results"> <s:iterator var = "flightList" value="pathList"> <s:radio name="flightSelected" list="flightList" listKey = "flightid" id = "flightid" value = "flightid"/> </s:iterator> </s:iterator> <s:submit label="Submit" /> </s:form> 如果您想要实现的是为每个“行”都有一个提交按钮,提交一个值,然后使用多个表单和一个隐藏字段: <s:iterator var = "bookingList" value="bookings"> <s:form action="actionDeleteBooking"> <s:hidden name="selectedItem" value="%{bookingid}" /> <s:submit label="delete booking" value="cancel booking" theme="simple" /> </s:form> </s:iterator> 否则使用 <s:a />,或使用 JavaScript 设置字段,或更好地描述您想要的内容。 您可以对要删除的项目使用 checkbox 标签。您应该能够做到这一点,因为您已经使用过类似的形式 s:radio。 <s:form action="actionDeleteBooking"> <s:iterator var = "bookingList" value="bookings"> <s:checkbox name="bookingids" label="bookingid" /> </s:iterator> <s:submit label="delete bookings" value = "cancel booking" theme = "simple"/> </s:form>
如何在 Struts 2 中使用 request.isUserInRole() 对 JSP 和 REST 服务上的用户进行授权?
我正在 JBoss AS7 服务器上使用 Struts 2 和 REST 服务开发一个小型 Java EE 应用程序。 我对 REST 和 Web 内容使用 FORM auth,并且 REST 没有任何问题,但是……
在我的 Struts 2 应用程序中,我尝试添加 CSS 样式,但它没有显示在页面上。当我点击提交按钮两次并显示验证错误后,CSS 才变成
如何将参数作为查询字符串添加到 Struts 2 中的重定向操作结果?
我正在将应用程序从 Struts 1 迁移到 Struts 2。我这里有一个用例。 Struts 1 操作在 URL 中添加一个查询字符串,如下所示: 公共字符串execute()抛出异常{ .....一些...
我试图在单击按钮(非提交按钮)时将文本字段的值作为 URL 参数从 JSP 传递到操作类,并在此链接中找到了解决方案:Onchange event in Stru...
Web应用如果不升级到Struts 2.3.16.1会面临什么样的漏洞?
我们有使用Struts 2.0和2.1的项目。 我们正在使用 Tomcat 进行网络托管,并且这两个项目在远程服务器上都运行良好。最近,我们收到来自虚拟主机提供商的警告消息,我...
为什么在 Struts 2 中,即使没有 value 属性,<s:textfield> 标签也会显示值?
我有一个 Struts 2 标签,我只需要让用户输入一个值并将其发送到操作。 我有一个 Struts 2 <s:textfield> 标签,我只需要让用户输入一个值并将其发送到操作。 <s:textfield name="user.firstAnswer" size="110" cssClass="FormObjectCompulsary" autocomplete="off" /> 即使加载此页面,用户对象也包含第一个答案的值。我不想将其显示在文本字段中。相反,我希望文本字段为空。 但是,如果不指定 value 属性,用户对象的值仍然显示在该字段中。 如果要添加新对象 user,那么您应该在 JSP 中显示它之前使用 new 运算符创建该对象。它将包含未显示的 null 引用。如果未指定 value 属性,则使用 name 显示值。 在 execute() 内后将用户对象设置为空。所以它再次不会在文本框中显示值。 例如。 user = null; 我正在向您展示一段代码,也许会对您有所帮助。 请参阅execute()。 package online.solution; import com.opensymphony.xwork2.Action; public class MyAction implements Action { UserBean user = new UserBean(); public UserBean getUser() { return user; } public void setUser(UserBean user) { this.user = user; } @SuppressWarnings("finally") @Override public String execute() throws Exception { String result = ""; try { user.setGuest("Bye bye"); System.out.println(user.getUsername() + " " + user.getPassword()); if (user.getUsername().equals(user.getPassword())) { result = SUCCESS; } else { result = ERROR; } user = null; //Make it null when all task completed. } catch (Exception exception) { System.out.println("Exception -> " + exception); } finally { return result; } } @Override protected void finalize() throws Throwable { super.finalize(); } } 通过查看 name="user.firstAnswer" 我认为您正在将 ModelDriven<> 实现到您的操作类中。可能发生的情况是,当您在操作类中返回成功并进入 jsp 页面时,如果在操作中您的用户模型有一些值..模型驱动将在您的 JSP 页面上为您设置这些字段。 我在学习 struts2 时使用了这种方法来更新表单功能。只需确保用户对象在返回之前不包含任何内容...
我是 Struts 2 的新手,正在尝试使用 fileUpload 拦截器。我正在附加所有代码层 操作类(FileUploadAction): 包 com.caveofprogramming.actions; 导入java.io.File; 我...
如何实现 Hibernate 会话/事务拦截器以避免在 Struts 2 中执行 JSON 结果时出现 LazyInitializationException?
我正在尝试实现 Hibernate 会话/事务拦截器以避免 Struts 2 中 JSON 结果出现 LazyInitializationException,但出现以下异常: 245968 [http-8080-7] 错误实用程序。
如何在 Struts 2 中使用 OGNL 更改会话范围变量的属性值?
是否可以使用 OGNL 更改会话范围变量的属性值? 例如,如果我的会话中有一个名为 PROCESS_CONFIG 的属性,它是一个具有 na... 属性的对象。
如何使用 <s:select> 标签在 Struts 2 中对数千个选项进行多选?
我在JSP中有以下多选块 在 标签内。当我提交表格时, 操作方法工作正常。 我在 JSP 中有以下多选块 在 <s:form> 标签内。当我提交表格时, 操作方法工作正常。 <s:select id="prodSelect" list="#application.actionForm.vtrProduct" name="repSearchProdVO.product" multiple="true" emptyOption="false" headerKey="-1" theme="simple" style=" font-size: 14px; color: #000069; font-family: 'Arial, Helvetica, sans-serif'; height: 20px; width: 240px; " value="#session.repSearchVO.product" /> 但是,repSearchProdVO.product只能处理890个选项。 我有超过3000个选项需要选择。 当我选择 2000 个选项时,它仍然返回 890 个选项。 在 Struts 2 中,无法将 <s:select> 用于大型数据集。因为它呈现一个简单的 HTML <select>,它受到显示大小选项的限制。如果您设置更多选项,它们只会隐藏在您的显示尺寸后面。如果您需要在大型数据集中选择多个选项,那么您可以使用带有结果查询的请求。 例如<sj:autocompleter>可以通过搜索词使用的远程https请求来帮助您查询大型数据集。 它有一个 multiselect 属性 创建多项选择。如果值通过 value 属性作为数组或集合(适当类型)传递,则标记将预先选择多个值。如果其中一个键等于集合或数组中的值之一,它将被选择。 您可以在this答案中找到自动完成器小部件的示例。 我忘了提及服务器是Tomcat 9.0.75。 maxParameterCount中端口8080的server.xml的默认值为1000。我将其更改为10000,一切都按预期工作。这可能会对某人有所帮助。 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxParameterCount="10000" />
我希望在我的应用程序中获得一些全局结果。在良好的旧 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都是可见的; 本地结果仅对该操作可见(但如果通过动态方法调用调用,则对所有方法可见); 本地结果仅对该 Action 和 Method 可见,如果该方法包含在 struts.xml 中的 Action 标记中(那么您将拥有针对同一 Action 类和不同方法的多个操作标记)。 我认为对于约定,全局是(2.),本地是(3.)它们都是操作的本地,但是全局可以从每个方法返回,而本地只能从定义它的特定方法返回。