我有一个关于struts2值栈的问题.假设我有一个Action类RegisterAction,它有一个execute方法,如下所示:
public String execute() {
ValueStack stack = ActionContext.getContext().getValueStack();
stack.push(new String("test string"));
return SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
我的struts.xml看起来像这样:
<struts>
<package name="default" extends="struts-default">
<action name="*Register" method="{1}" class="vaannila.RegisterAction">
<result name="populate">/register.jsp</result>
<result name="input">/register.jsp</result>
<result name="success">/success.jsp</result>
</action>
<action name="*Test" method="{1}" class="vaannila.TestAction">
<result name="test">/test.jsp</result>
<result name="success">/success2.jsp</result>
</action>
</package>
</struts>
Run Code Online (Sandbox Code Playgroud)
因此,在该类中执行execute方法后,控制将流向success.jsp.
我的问题是:
1)如何获得我在堆栈中推送的值success.jsp?
2)让我们说success.jsp我有一个<s:submit method="testMethod" />重定向到一个名为的动作类TestAction.换句话说,从Register页面,用户单击submit,并在我们的执行方法中RegisterAction推送堆栈上的"测试字符串".然后我们去success.jsp.该success.jsp有一个提交按钮,指导我们TestAction#testMethod.在TestAction#testMethod,我RegisterAction#execute仍然在堆栈上推送的值是什么?我怎么才能得到它?我逐步完成了eclipse调试器,但我没有看到它的价值.
谢谢.
我有以下代码:
<s:iterator value="reviews">
<img src="<s:property value="#request.restaurant.portalImage.url" />" />
<s:property value="user.firstName" />
<s:property value="user.lastName" />
<s:property value="rating" />
<s:property value="review" />
</s:iterator>
Run Code Online (Sandbox Code Playgroud)
评论是一个评论对象列表,其中包含评论的详细信息,例如评级和用户名.
我的问题是我无法访问循环中ValueStack上的任何对象.
循环外部<s:property value="#request.restaurant.portalImage.url" />正常工作.但是在循环中它打印为null.
AFAIK和迭代器在ValueStack上推送它的集合,以便所有OGNL表达式都能解决它.但我使用了#,这意味着我明确指定了解析的根对象.
为什么它仍然不起作用?
我有一个显示在每个页面上的搜索框。搜索框的 JSP 代码通过图块插入到每个页面中。
搜索框有一个表单和一个操作类SearchAction,需要为下拉框预加载一些属性。班级SearchAction有一个input()方法来执行此初始化。
一些页面在主区域也有自己的表单。还有自己的动作类。他们还有一种input()方法可以进行一些预加载。
更新:
我添加了一个精简的示例,因为可能不清楚我要做什么。这是一个register.jsp带有RegisterAction. 该页面还包含搜索表单。(顺便说一句:为了保持简短,我在操作类中省略了 getter/setter 和其他内容):
register.jsp:
<s:form action="executeSearch">
<s:textfield key="name" label="Name"/>
<s:textfield key="age" label="Age"/>
<s:submit/>
</s:form>
<s:form action="executeRegister">
<s:textfield key="firstName" label="First Name"/>
<s:textfield key="lastName" label="Last Name"/>
<s:textfield key="age" label="Age"/>
<s:submit/>
</s:form>
Run Code Online (Sandbox Code Playgroud)
struts.xml:
<action name="*Search" class="action.SearchAction" method="{1}">
<result name="success">/searchresult.jsp</result>
</action>
<action name="*Register" class="action.RegisterAction" method="{1}">
<result name="input">/register.jsp</result>
<result name="success">/registerOk.jsp</result>
</action>
Run Code Online (Sandbox Code Playgroud)
SearchAction.java:
public class SearchAction extends …Run Code Online (Sandbox Code Playgroud) 我是Python的新手.我有两个字典,它们共享相同的键,但键的值不同.我想比较两个词典,以便我得到每个键的值的数值差异.例如:
dict1 = {'hi' : 45, 'thanks' : 34, 'please' : 60}
dict2 = {'hi' : 40, 'thanks' : 46, 'please' : 50}
换句话说,我想收到第三本字典或一对配对列表,它们会显示这两个字典中值的数字差异(从dict2中减去dict1的值(反之亦然).因此它会像这个:
dict_difference = {'hi' : 5 , 'thanks' : -12, 'please' : 10}
我知道从另一个字典中减去一个字典:
dict1 = Counter({'hi' = 45, 'thanks' = 34, 'please' = 60})
dict2 = Counter({'hi' = 40, 'thanks' = 46, 'please' = 50})
dict3 = dict1-dict2 #将仅返回正值,因此它将给出:
dict3 = {'hi'= 5, 'please' = 10} #这不是我想要的.
我还想过将字典转换成一对列表(我认为这就是它的调用方式):
dictlist = []
for key, value in dict1.iteritems():` …Run Code Online (Sandbox Code Playgroud) 请考虑以下代码.
public class SampleAction {
private String[] sampleArray1 = new String[]{"item1","item2","item3"};
private String[] sampleArray2 = new String[]{"a","b","c"};
private List lst = new ArrayList();
lst.add(1)
lst.add(2)
//Getters and setters
}
Run Code Online (Sandbox Code Playgroud)
当我们尝试在JSP中访问它时,上面的哪些属性将在值栈中?它是否像普通堆栈一样工作,即继续推送它读取的任何属性?