struts2 相关问题

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

如何在struts 2中从响应中排除参数并发送我们想要的对象?

我想要 Ajax 请求的 JSON 结果,但我的要求是仅发送对象的 ArrayList 并排除操作类中存在的一些参数。那么如何做到这一点呢? 这是我的动作课

回答 1 投票 0

如何使用Ajax请求创建和下载Excel文件

如果用户在我的网页上按下公式按钮,我想创建一个 Excel 文件。我的第一个解决方案效果很好。用户按下按钮,服务器端 java 代码创建文件,然后

回答 2 投票 0

从struts2中的jsp页面调用action类中的方法

我编写了以下代码,将变量 artpsMstId 传递给 JavaScript 函数,然后更新针对该变量存储的记录: 在 JSP 中: 我编写了以下代码,将变量 artpsMstId 传递给 JavaScript 函数,然后更新针对该变量存储的记录: 在 JSP 中: <td> <a href="javascript:fnUpdate('<s:property value="artpsMstId" />');">testupdate</a> </td> <script type="text/javascript"> function fnUpdate(id) { <s:url action='updateServiceDetails'></s:url> document.forms[0].artpsMstId.value=id; document.forms[0].submit(); } </script> 在struts.xml中: <action name="updateServiceDetails" class="com.stp.portal.view.SearchServicePortlet" method="updateServiceDetails"> <result name="success">/WEB-INF/view/ServiceSubmitPage.jsp</result> </action> 我在updateServiceDetails中定义了函数SearchServicePortlet.java。 但流量并没有到达SearchServicePortlet.java。如果有人能帮助我,我将非常感激...谢谢 ----已编辑----- 这基本上就是我想做的事情 <s:form action="updateServiceDetails" method="POST" theme="simple" > <tr> <td> FirstName </td> <td> LastName </td> <td> Edit </td> </tr> <s:iterator value="resultList" > <tr> <td align="center"> <s:textfield name="firstName" /> </td> <td align="center"> <s:textfield name="lastName" /> </td> <td> Edit </td> <td align="center"> <a href="javascript:fnUpdate('<s:property value="artpsMstId" />');">testupdate</a> </td> </tr> </s:iterator> </s:form> 上面的代码显示了一个包含名字和姓氏的列表,每行都有一个编辑选项。现在我想在 javascript 中调用函数 fnUpdate() 以便 我可以单独编辑和保存每一行。这就是我基本上需要做的。 不必在整个表格上使用表单,只需使用单独的表单,然后单击表格行中的链接,调用 javascript 函数来提交该单独的表单, 尝试下面的代码, 在jsp中, <form name="updateServiceDetailForm"> <input type="hidden" name="artpsMstId"/> </form> <table> <tr> <td> FirstName </td> <td> LastName </td> <td> Edit </td> </tr> <s:iterator value="resultList" > <tr> <td align="center"> <s:textfield name="firstName" /> </td> <td align="center"> <s:textfield name="lastName" /> </td> <td> Edit </td> <td align="center"> <a href="javascript:fnUpdate('%{artpsMstId}');">testupdate</a> </td> </tr> </table> 在 JavaScript 中, function fnUpdate(artpsMstId) { document.forms.updateServiceDetailForm.action = "updateServiceDetails.action"; document.forms.updateServiceDetailForm.method = "post"; document.forms.updateServiceDetailForm.artpsMstId.value = artpsMstId; document.forms.updateServiceDetailForm.submit(); }

回答 1 投票 0

如何为基于 Java 和 struts2 框架构建的旧 Web 应用程序提供针对跨站请求伪造 (CSRF) 攻击的保护 [重复]

如何为基于 Java 和 struts2 框架构建的旧 Web 应用程序提供针对跨站请求伪造 (CSRF) 攻击的保护? 尝试在 servlet 之前添加过滤器,卡在那里。

回答 1 投票 0

如何在Struts 2中动态设置静态参数的值

我想知道,是否可以动态地将值设置为静态参数 动态价值在这里 我想知道,是否可以动态地将值设置为静态参数 <action name="TestApp_*" class="test.TestApp" method="{1}"> <param name="app_Id">Dynamic value here</param> <result name="input">WEB-INF/jsp/test/testView.jsp</result> </action> 我试过了 <action name="TestApp_*" class="test.TestApp" method="{1}"> <param name="app_Id">${app_Id}</param> <result name="input">WEB-INF/jsp/test/testView.jsp</result> </action> 不工作。它将 ${app_Id} 显示为常规文本。 请注意,它显示 ${app_Id} 作为常规文本到底是什么意思。Struts2 提供了这种灵活性,您可以动态设置 param 值。 您只需在操作类中设置这些值,即可将它们用作占位符。 public class MyAction extends ActionSupport { private int app_Id; public String execute() { // you execute logic this.app_Id= 123; return SUCCESS; } // getter and setter for app_Id } 您可以在结果配置中使用此app_Id <action name="TestApp_*" class="test.TestApp" method="{1}"> <param name="app_Id">${app_Id}</param> <result name="input">WEB-INF/jsp/test/testView.jsp</result> </action> 您可以获得更多详细信息配置结果中的参数 您可能已经(错误地)手动编写了 getter,而不是让 IDE 为您完成。 变量app_Id;必须有一个吸气剂getApp_Id(),而你可以有类似getapp_Id()或get_app_Id()之类的东西......但是如果你不发布你的操作代码,我们怎么知道它?! 此外,考虑更改变量(从现在开始)以尊重约定,即希望它们采用驼峰式命名,而不是下划线分隔...然后 appId 表示变量,getAppId() 表示 getter。 尝试这样做.. <result type="redirect"> <param name="location">WEB-INF/jsp/test/testView.jsp</param> <param name="inputName">app_Id</param> </result> 在jsp页面中你可以直接使用这个值就像 <s:properties value="app_Id"> 试试这个。 看看staticParams拦截器。 此拦截器使用操作配置中定义的静态参数填充操作。如果操作实现了Parameterizable,静态参数的映射也将直接传递给操作。静态参数将添加到请求参数映射中,除非 merge 设置为 false。 参数通常使用 <param> 中的 struts.xml 元素定义。 它展示了如何将此拦截器配置到您的操作配置中。 例如: <action name="someAction" class="com.examples.SomeAction"> <interceptor-ref name="defaultStack"> <param name="staticParams.parse">true</param> <param name="staticParams.overwrite">false</param> </interceptor-ref> <param name="num">${numValue}</param> <result name="success">good_result.ftl</result> </action> 这使得拦截器能够从操作配置中解析 OGNL 表达式的参数值。

回答 4 投票 0

Struts 2 - 当第二个操作与表单一起使用时,操作之间传递的参数会丢失

我有两个动作类,它们通过 ModelDriven 接口使用相同的模型。 每个动作类别都与形式有关。 我需要在两个操作中将值存储到同一模型。 从第一堂动作课开始(...

回答 1 投票 0

javax.servlet.ServletException:org.apache.jasper.JasperException:无法编译JSP类

在尝试运行我的示例项目时,出现以下错误: HTTP 状态 500 - -------------------------------------------------- ------------------------------------------ 类型异常报告 信息

回答 2 投票 0

Eclipse中使用Maven的Struts2配置冲突

我正在将一些旧的遗留应用程序升级到 Maven。这些应用程序在传统的 WebSphere Application Server 8.5.5 中运行,我使用 Eclipse 4.16.0 来运行 WAS 服务器。 它只编译...

回答 2 投票 0

从displayTag列元素内部访问Struts2值堆栈

我想通过访问 Struts 2 值堆栈中的属性来使 titleKey 属性参数化。所以,我想做这样的事情: 我想通过访问 Struts 2 值堆栈中的属性来使 titleKey 属性参数化。所以,我想做这样的事情: <display:table name="myListOfObjects" id="myId" requestURI="/myAction.action" pagesize="10"> <display:column property="myProperty" titleKey="my.internationalyzed.i18n.key.myProperty.<s:property value='anotherObject.aProperty'/>" /> ... 如您所见,我想在我的操作中访问公开对象的属性 <s:property value='anotherObject.aProperty'/> 并将值放入 titleKey 元素中。 如果我这样做,结果是一个表列,其标题为未解析的 my.internationalyzed.i18n.key.myProperty 字符串。换句话说,<s:property> 标签不会在 <display:column> 元素内部进行解释。 但是如果我把 <s:property value='anotherObject.aProperty'/> 在 <display:table> 元素之外,它会被正确解析,并且结果值会显示在页面上,因此属性会被正确公开和赋值。 您知道如何从 <display:column> 元素内部访问操作中公开的属性吗? 您可以在非struts标签内使用JSP EL表达式,因此在查看请求范围时表达式将要求请求公开值堆栈。例如 <display:column property="myProperty" titleKey="my.internationalyzed.i18n.key.myProperty.${anotherObject.aProperty}" />

回答 1 投票 0

Struts 2 显示标签/单选按钮

我有一个工作显示标签单选按钮,代码如下。下面是代码: 我有一个工作显示标签单选按钮,代码如下。下面是代码: <s:form action="deleteUser.action" method="post"> <display:table id="conf" name="users" requestURI="viewUsers.action" pagesize="10"> <display:column title="Edit" scope="request"> <input type="radio" name="selectedUser" value="${conf.username}" onclick="getValue()" /> </display:column> <display:column property="username" title="User Name" /> <display:column property="email" title="Email" /> <display:column property="role" title="Role" /></display:table><s:submit method="deleteUser" key="Delete User" align="center" /> </s:form> 我已将 strtus2-core-2.3.4.jar 升级为 strtus2-core-2.3.14.jar 和其他一些罐子。 现在,当我选择一个单选按钮并单击“提交”时,我没有获得该单选按钮的基础值,而是将 ${conf.username} 放入我的 POJO 字段中。有人遇到过这个吗?我缺少任何库吗? 您可以从中获取值 <display:table uid="row" id="conf" name="users" requestURI="viewUsers.action" pagesize="10"> <display:column title="Edit" scope="request"> <input type="radio" name="selectedUser[%{#attr.row_rowNum - 1}]" value="<s:property value="%{#attr.row.username}"/>" onclick="getValue()" /> 至selectedUser列表。 ${} 用于 EL 表达式引用尚未放入请求或会话等的属性。

回答 1 投票 0

如何将 Spring Boot 应用程序与 Struts 2 集成

我们使用 Maven 制作了一个 Spring Boot 应用程序,以通过 OIDC/OAuth2 Connect Client 功能启用登录。该应用程序基于 Spring Security 5 和 Java 1.8。我们还有一个 Struts2 网络

回答 0 投票 0

在 Apache Struts 中,如何在不编写 Action 类的情况下重定向到外部 URL?

在我的 Struts 应用程序中,我需要创建一个端点 (URL),它只是告诉用户的浏览器重定向到外部 URL。 看起来这可以通过创建一个新的 Action 类来完成,并且

回答 1 投票 0

struts 6.2.0中CSRF实现错误

我正在尝试在Struts 6.2.0项目中实现CSRF。 struts.xml 我正在尝试在 Struts 6.2.0 项目中实现 CSRF。 struts.xml <package name="struts-security" abstract="true" extends="struts-default"> <interceptors> <interceptor-stack name="defaultSecurityStack" /> <interceptor name="token" class="org.apache.struts2.interceptor.TokenInterceptor" /> <interceptor name="tokenSessionStore" class= "org.apache.struts2.interceptor.TokenSessionStoreInterceptor" /> </interceptors> <default-interceptor-ref name = "defaultSecurityStack" /> <global-results> <result name="error">/error401.jsp</result> </global-results> <global-exception-mappings> <exception-mapping result="error" exception="java.lang.Exception" /> </global-exception-mappings> LoginAction.java @Namespace("/common") @Action("Login") @InterceptorRefs({ @InterceptorRef("token"), @InterceptorRef("tokenSessionStore") }) @Results({ @Result(name = "input", location = "login.Login", type = "tiles"), }) login.jsp <%@ taglib prefix="s" uri="/struts-tags"%> <s:form method="post" validate="true" theme="simple" name="form" id="paraFrm" > <s:token /> 它回来了invalid.token。因为我添加了返回页面,所以它重定向到错误页面。是否需要额外的代码来在操作页面或任何其他地方实现令牌。请重新打开它,因为旧的标记问题对我没有帮助。 要使用struts.xml中定义的拦截器,您应该添加注释 @ParentPackage("struts-security") 您正在尝试使用 tokenSession 拦截器。 tokenSession拦截器: 此拦截器基于 TokenInterceptor 构建,提供处理无效令牌的高级逻辑。与普通的令牌拦截器不同,该拦截器将尝试在使用同一会话的多个请求的情况下提供智能故障转移。也就是说,它将阻止后续请求,直到第一个请求完成,然后它不会返回 invalid.token 代码,而是尝试显示与未提交多个请求时原始有效操作调用将显示的相同响应首先。 示例代码: <action name="someAction" class="com.examples.SomeAction"> <interceptor-ref name="tokenSession/> <interceptor-ref name="basicStack"/> <result name="success">good_result.ftl</result> </action> <-- In this case, myMethod of the action class will not get checked for invalidity of token --> <action name="someAction" class="com.examples.SomeAction"> <interceptor-ref name="tokenSession> <param name="excludeMethods">myMethod</param> </interceptor-ref name="tokenSession> <interceptor-ref name="basicStack"/> <result name="success">good_result.ftl</result> </action> 正如您在示例中看到的,您缺少一些基本的拦截器。

回答 1 投票 0

在 Ubuntu 上部署 Tomcat

我在 Windows Server 和 Mac OS 上使用 Tomcat 8 或 9 成功部署了 ROOT.war。但是当我在 Ubuntu VPS 上部署它时,我收到以下错误: 2023 年 5 月 17 日 23:28:21.127 信息 [主要] org.apache.

回答 0 投票 0

字面上导致 StackOverflowError - Tiles 3

从 Struts 1.3/Tiles 1.x 组合迁移到 Struts 2/Tiles 3。 但这确实是一个 Tiles 问题 以前有支持定义内的bean声明来支持

回答 0 投票 0

Struts2 + Bootstrap 数据表:如何在不加载所有数据的情况下分页

我在一些使用 Struts2 框架的应用程序中工作,在操作中我加载了一些列表中我们需要的所有数据,然后在 JSP 文件中迭代并显示在 中 我在一些使用 Struts2 框架的应用程序中工作,在操作中我加载了一些我们需要的所有数据 List<Object> 然后在 JSP 文件中,这个列表被迭代并使用引导框架显示在数据表中。 这很好用,但我知道如何在不在生成的 HTML 中加载完整数据的情况下执行此操作,就像我有 1.000.000(一百万)条记录一样。 我不希望所有记录都在 JSP 的结果 HTML 输出中,只有前 10 个记录,如果需要,则使用分页加载(使用 jQuery?)其余数据集。 添加到 Enrique San Martín 的评论中:http://legacy.datatables.net/usage/server-side 任何好的例子都应该使用iDisplayStart和iDisplayLength参数,当然还有"bServerSide": true的datatable()属性。 这里是博客文章的链接:使用 Ajax 将 jQuery 数据表与 Struts2 操作类结合使用。 好吧,这是一个很好的方法,但我必须将 request.getParameter 转换为 struts 变量(声明为私有,然后生成 getter 和 setter): 来自:https://datatables.net/development/server-side/jsp edit:此链接有一些 request.gP,其中包含数据表中的旧值,而我们必须使用以下参数: https://datatables.net/manual/server-side#Sent-parameters 喜欢一个动作: private String draw; private String length; private String order; private String search; private String start; getters&setters{} //or make it public 然后在 ajax 调用的 actionMethod 中查询数据库并返回数据集。 当我使用 struts2+datatables 进行完整分页时,我将编辑这个答案, 在数据表中有一些必要的配置(参见datatables.net的文档): <script> $(document).ready( function() { $('#datatable').dataTable( { "iDisplayLength": 5, "processing": true, "serverSide": true, "ajax": "paginateTableAction" } ); } ); </script> 最好的方法是在您的 DAO 中创建一个方法,该方法具有附加参数开始和结束,例如: getCustomers( int start,int end){ // get all customers // sublist the result and get the data from start index to end index } 在您的控制器中,您将做几乎相同的事情,您将通过 start 或 end 请求提供 POST 和 GET 参数 @RequestMapping(value = "/sublistedCustomers", method = RequestMethod.GET) public String getSublistedCustomers(@RequestParam("start") final int start,@RequestParam("end") final int end){ model.addAttribute("cutomersResult",yourDAO.getCustomers(start,end)); } 现在您的 JSP 文件中有一部分客户记录,您可以决定如何显示此子列表结果。

回答 3 投票 0

为什么 Struts-2 的 tiles 模板被称为“插件”而不是库?

插件为现有程序添加功能,库用于软件开发。 我们使用struts-2中的tiles-framework来开发像jdbc-api这样的应用程序,那它们为什么调用...

回答 0 投票 0

Struts2 映射 save.action\param1 alue1\param2 alue2 到 action

我们在 Tomcat 9 上使用 Struts 6.2,并将所有 .action 扩展映射到操作,例如 save-user.action 正确映射到操作。 Web 应用程序也需要处理这个 URL:save-user。

回答 1 投票 0

如何使用struts2 s:set variable inside s:select tag for list values?

我想在 s:select 中使用 s:set 变量: 纽约 我想在里面使用一个s:set变量s:select: <s:set var="cityNY">NewYork</s:set> <s:select name="cities" list="#{'%{#cityNY}':'%{#cityNY}'}" required="true" /> 上面只是在我的页面中打印相同的值 - %{#cityNY} 想要在 s:set 标签的选项中显示 if s:select 变量的值 您需要将上下文变量直接放入 OGNL 表达式而无需%{}。它将实例化一个地图。 <s:select name="cities" list="#{#cityNY:#cityNY}" required="true" /> list 属性值可以包含 OGNL 表达式。它默认用于解析 OGNL 的值而无需显式%{}。可以在 OGNL 表达式中直接引用子表达式。 #{exp1:exp2} 是一个 OGNL 表达式来实例化一个 Map。它里面有子表达式。每个子表达式应该返回一个不是集合的值。因为他们曾经为地图创建一个键/值对。 如果您使用相同的子表达式,那么最好使用以下代码实例化一个List <s:select name="cities" list="{#cityNY}" required="true" /> 它将生成一个 HTML <select> 标签,其中有一个 <option> 具有相同的值和文本。 如果您需要更多选项,那么您应该使用逗号向 OGNL 表达式添加值。 您可以在我对 OGNL/Struts2 JSP assigning bean to an object. 的回答中找到参考文档

回答 1 投票 0

Struts2 RequestAware接口的使用

如果我的动作类如下: 包 org.tutorial.struts2.action; 导入 java.util.Map; 导入 org.apache.struts2.interceptor.RequestAware; 导入 org.tu ...

回答 2 投票 0

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