Tag: valuestack

Getter Property(没有属性和setter)通过ValueStack访问

public class MyAction extends ActionSupport { public String getMyValue() { return “SomeText”; } … } 我有这个MyAction类。 现在,问题是当我使用OGNL在我的JSP页面中引用myValue时,它会在ValueStack上创建myValue属性,还是只调用getter方法?

Struts 2在validation器扩展中使用StringUtils

我们使用Struts 2validation器@FieldExpressionValidator和@ExpressionValidator 。 这些validation器检查OGNL表达式。 在很多情况下,我们在这些表达式中处理字符串。 expression=”(captcha==” && captcha== null || ….) 我们发现如果我们可以在这里使用StringUtils(isEmpty,trimToEmpty,…)非常有用。 当我们将struts.ognl.allowStaticMethodAccess设置为false时,出于安全问题,我们尝试通过将此getter添加到action来解决它 public StringUtils getStringUtils(){ return new StringUtils(); } 然后在表达式中使用stringUtils.isEmpty(captcha) 。 但它没有用。 调试我们测试 ActionContext.getContext().getValueStack().findValue(“stringUtils”); //returns org.apache.commons.lang3.StringUtils@693ade51 which shows there is an object in the stack ActionContext.getContext().getValueStack().findValue(“stringUtils.isEmpty(‘dd’)”); //returns null 任何意见 ?!

从execute()方法中的列表中检索值

我想要显示的项目列表以及每个都有一个空白文本字段来填充我的JSP页面上的金额,一旦我填写了所需的项目金额,我将提交。 我有如下的ExampleAction类,其中我有populate()方法,我首先触发,以便填充项目。 我点火了: http://localhost:8084/WebExample/populate.action. 相同的ExampleAction执行mtd,我从JSP页面调用SUBMIT按钮操作。 但我的问题是在执行方法,我无法获取列表中的对象,即exList。 这是因为动作类的实例只与一个请求相关联吗? 当我通过SUBMIT按钮触发另一个动作时,有不同的值堆栈关联? 如果是,那么我应该以最好的方式检索输入的那些金额(在JSP中),在execute()方法中在Tomcat的控制台中打印? ExampleAction: private ArrayList exList; private EX ex; public ExampleAction(){ exList = new ArrayList(); } //Getters And Setters. @Override public String execute() throws Exception { for (EX ex1 : exList) { System.out.println(“ex1 = ” + ex1.getName()); } return SUCCESS; } public String populate() throws Exception{ System.out.println(“in populate”); […]

如何使用Struts2中的Bean将对象从动作类传递给JSP?

我必须从我的动作类将Bean类的对象发送回JSP。 我在我的动作类中实例化Bean类,并在我的Action类中设置一些值。 ElasticitiesVariable elasticitiesVariable = new ElasticitiesVariable(); elasticitiesVariable.setAuto_Auto_cost_peak(“-0.047”); elasticitiesVariable.setAuto_Ride_cost_peak(“0.000”); elasticitiesVariable.setAuto_Van_cost_peak(“0.000”); elasticitiesVariable.setAuto_Transit_cost_peak(“0.050”); elasticitiesVariable.setAuto_Bike_cost_peak(“0.000”); 在我的JSP中,我也声明了bean类。 在bean类中,我已经使用public getter和setter声明了变量private。 但JSP中的值为null。 调试后我发现动作类没有问题。 但是当命令进入bean类时,值变为null 。

Struts2会话存储位置和管理

我正在阅读Struts2 In Action,它表示每个请求都会创建一个ActionContext ,一个ValueStack和一个Action实例,因此它们是线程安全的。 我想知道框架如何管理会话,因为它不能存储在这些位置,实际Map存储在哪里,以及框架如何管理对该Map的并发访问?

如何从值堆栈中删除操作?

我正在尝试让我的动作课单身。 关键是要在MVC模式中使动作类成为真正的控制器。 特别是在实现REST控制器时,控制器的范围可以扩展到应用程序的生命周期。 与Spring框架一样,默认情况下控制器被置于默认范围内,Spring中的默认范围是单例。 Struts2也有一个默认范围,它也是单例。 我想将我的动作类放到这个范围,并从值栈中删除它们。 我如何修改Struts2框架以使我的操作像Spring中的控制器一样? 我知道我可以将操作类的管理委托给Spring,但是我不能使用默认范围,并且Struts2容器仍在继续运行。 我无法从框架中删除它,因为它不可插拔。 所以,捎带Spring和Struts2容器我无法使我的动作类单例,因为Struts2实例化它们并放入值栈。 这是我的问题:如果我选择Struts和Spring之间的容器将我的动作类放到默认范围,我怎么能告诉Struts2框架不要把它们放到值栈?

如何使用OGNL索引引用运算符

使用OGNL,您可以使用#application引用操作上下文对象,如#application , #session , #root , #action #application , #session , #root , #action和action上下文。 框架将OGNL上下文设置为我们的ActionContext,将值堆栈设置为OGNL根对象。 OGNL使用[]作为索引引用来访问对象属性。 例如,如果对象foo有一个属性bar那么它可以像foo.bar或foo[‘bar’] 。 如果foo是一个地图而bar是一个键,它也可以工作。 现在,我想将一个变量和一个值放到值栈上下文中 并打印该值 它应该打印hello 。 我想知道它是如何工作的。 我知道#attr是一个没有#foo引用的属性的#foo ,即bar 。 然而这是有效的。 如果我使用#request和#context ,并且可能是#root而不是#attr ,它也可以工作。 这两个对象都没有属性bar ,但OGNL认为不然。 我想知道OGNL对它引用的对象的属性的看法以及为什么这个表达式正在工作。 另外,如果有其他方法可以在OGNL表达式中使用#foo引用打印hello 。

参数传递为Struts 2中静态包含的页面

我有一个父文件,我的JSP静态包含在其中。 在包含的文件中,我想使用Struts2标记访问父JSP的变量。 如果有可能或者我应该选择动态包括,请告诉我。

Struts2 ValueStack如何处理多个请求

我理解在Struts2中引入了ValueStack而Struts1模型的另一个变化现在是为每个请求实例化一个新的ActionObject 。 因此,我们可以定义实例变量而无需担心multithreading问题。 拦截器和JSP从ActionObjects访问实例变量的ActionObjects是通过ValueStack 。 但ValueStack实现的方式(或至少由Struts2框架使用)是由ValueStack 。 使访问更容易,这样我们就不需要遍历整个对象树。 我有以下问题。 如果我有嵌入对象(多个对象层次结构)怎么办? 在这种情况下访问机制如何表现? 如果让我们说2个客户端同时向同一个肌动蛋白发出请求,并且Action执行的结果不同,因为2个客户端提供的输入返回了2个不同的结果。 让我们说我的Action类有一个方法来获得最优惠的价格,并根据我的后端服务中的逻辑,结果出现在10和12两个不同的请求。 现在, ActionClass有一个名为price的成员变量,其中将存储此值,结果JSP showResults.jsp将访问此变量(使用标记lib)来显示价格。 struts2框架如何保证client1和client2能够得到正确的响应,并且在JSP上显示响应时价格不会混乱,因为根据我的理解, ValueStack只是先进先出(堆栈逻辑)方式。 因此,它可能最终会向两个客户端请求返回10,因为相同的变量在值堆栈上存储了两次(具有相同的名称)但具有不同的值。 ValueStack何时从列表中销毁对象?

当struts.ognl.allowStaticMethodAccess为false时,Struts 2调用静态方法

出于安全性问题,struts 2将struts.ognl.allowStaticMethodAccess设置为false 。 静态方法调用在某些情况下可能很有用,例如在validation器扩展中使用StringUtils处理表达式基本validation器Struts 2时 。 解决此问题的一种方法是在操作中定义辅助方法,例如,如果我们要使用Math类,我们应该在下面添加: public double randomMath(){ return Math.random(); } public double asinMath(double a){ return Math.asin(a); } …. 并将其用作${randomMath}或${asinMath(1)} 正如您在Math类中看到的每个方法一样,我们需要在操作中定义一个具有相同签名的public方法。 有没有更好的方法来避免这些样板吸气剂?!