gpt4 book ai didi

java - 如何在 Struts 2 的单个 View 中使用多个表单/操作

转载 作者:搜寻专家 更新时间:2023-11-01 03:20:38 25 4
gpt4 key购买 nike

我有一个显示在每个页面上的搜索框。搜索框的 JSP 代码通过磁贴插入每个页面。

搜索框有一个表单和一个操作类SearchAction,它需要为下拉框预加载一些属性。 SearchAction 类有一个 input() 方法,它执行此初始化。

有些页面在主区也有自己的表单。也有自己的 Action 类。他们还有一个 input() 方法,可以进行一些预加载。

  1. 是否可以在同一个 View 中使用两个操作?
  2. 每个表单如何访问它自己的操作属性。
  3. 我如何设法在 JSP 呈现之前调用两个操作类的输入方法?

更新:

我正在添加一个经过精简的示例,因为它可能不清楚我要做什么。这是一个带有 RegisterAction 的注册页面 register.jsp。该页面还包含搜索表单。 (顺便说一句:我在 Action 类中省略了 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>

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>

SearchAction.java:

public class SearchAction extends ActionSupport {

private String name;
private int age;

@Override
public String input() throws Exception {
// preload the search form with some demo data
name = "test";
age = 20;
return INPUT;
}

@Override
public String execute() throws Exception {
return SUCCESS;
}

...
}

RegisterAction.java:

public class RegisterAction extends ActionSupport {

private String firstName;
private String lastName;
private int age;

@Override
public String input() throws Exception {
// preload the register form with some demo data
firstName = "John";
lastName = "Rambo";
age = 10;
return INPUT;
}

@Override
public String execute() throws Exception {
return SUCCESS;
}

...
}

假设我调用操作 inputRegister.action。然后调用 RegisterAction.input()。属性已设置。结果 SUCCESS 导致呈现 register.jsp

但是我的搜索表单呢?如何访问搜索操作及其模型。当然,这些都不在 ValueStack 上。而且我也没有看到一种方法来调用 SearchAction 的任何方法来初始化它的模型。我故意选择 age 在两个 Action 类中。在呈现的页面中,您可以看到搜索表单还访问了 RegisterAction-*.properties(因为它位于 ValueStack 之上)。但它需要访问 SearchAction。它必须显示 20 而不是 10。

Rendered Jsp Page

我显然做错了。但即使经过大量谷歌搜索,我仍然没有找到正确的方法。

最佳答案

正如我发现的(请纠正我):在向用户显示之前,需要在自己的操作中启动两个表单,当您请求注册表单时,搜索表单不会启动,因为它的操作从未被调用。

这是一个可以用 Ajax 轻松处理的常见问题,不要加载您的所有页面数据。请看http://struts.jgeppert.com/struts2-jquery-showcase/index.action .有一个Theme selection选择框,已经启动了一次。加载页面的其他部分将通过 Ajax 完成,因此主题选择(启动选择框的操作)不需要重新运行。您可以轻松地使用struts 2 jquery 插件来实现它。

如果您不能使用 Ajax(出于任何原因),那么没有简单的方法。您应该在每个操作中手动启动您搜索的表单项,以确保您的 struts 标记可以读取搜索表单启动的数据。您可以将其视为您需要的方式,将搜索操作的主体剪切并粘贴到您的所有操作中!!

关于java - 如何在 Struts 2 的单个 View 中使用多个表单/操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31494860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com