如何在 Struts 2 的单个视图中使用多个表单/操作

2024-04-09

我有一个显示在每个页面上的搜索框。搜索框的 JSP 代码通过图块插入到每个页面中。

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

一些页面在主区域中也有自己的表单。还有自己的动作类。他们还有一个input()进行一些预加载的方法。

  1. 是否可以在同一视图中使用两个操作?
  2. 每个表单如何访问它自己的操作的属性。
  3. 我怎样才能在渲染 JSP 之前调用两个操作类的输入方法?

Update:

我添加了一个精简的示例,因为可能不清楚我要做什么。这是一个注册页面register.jspRegisterAction。该页面还包含搜索表单。(顺便说一句:为了保持简短,我在操作类中省略了 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. Then RegisterAction.input()叫做。属性已设置。和结果SUCCESS causes register.jsp被渲染。

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

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


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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Struts 2 的单个视图中使用多个表单/操作 的相关文章

随机推荐

  • 如何删除firebase中具有指定标题的特定记录

    我在 Web 应用程序中使用 Firebase 数据库 并且有这样的数据 如何删除标题中包含 Apple 的整个记录 图中标记 我写了下面的代码 但它不起作用 请帮助 var abc firebase database ref fireba
  • 如何使用 Selenium Server 2.20 获取执行服务器名称或地址

    使用 Selenium Server 时 记录实际执行 selenium 脚本的计算机的名称非常有用 是否可以获得该信息 我正在使用 C 绑定 但用任何语言回答都可以 我们应该知道 Selenium 服务器在哪里运行 这是Java代码 我们
  • Android 应用内结算可用产品列表

    是否可以通过某种方式从 Play 商店获取所有可用产品的列表 我想要做的是获取所有可用的项目 然后将它们显示在 ListView 中 每当有人点击 ListView 时 就会在 Google Play 商店中打开正确的项目 那可能吗 如果是
  • 仅当其中一个流发生更改时,combineLatest 才会发出

    我有一个具有频繁值的流和一个具有较慢值的流 我想将它们组合起来 但仅当较慢的发出时才发出一个值 所以combineLatest不起作用 就像这样 a1 a2 b1 a2 b1 a3 a4 a5 b2 a5 b2 目前我正在这样做 有没有更干
  • 针对大型文件夹的并行 tar 和分割

    我有一个非常大的文件夹 我想对其进行 gzip 压缩并拆分以进行存档 bin bash dir 1 name 2 size 32000m tar czf dev stdout dir split a 5 d b size name 有没有办
  • 将列联表从 R 导出到 Excel 的最有效方法

    我正在 R 中创建一些列联表 交叉表 我想将其移动到 Excel 以在 Word 文档中使用 我发现了关于如何在几个问题中表现出色的讨论 如何将多元预测结果从 R 导出到 Excel https stackoverflow com ques
  • 在特定版本中测试 python 脚本

    我目前在我的 Mac 上安装了 Python 2 6 2 我正在编写一个必须在 Python 2 5 2 上运行的脚本 所以我想编写一个 python 脚本 并且测试专门针对 2 5 2 而不是 2 6 2 我正在查看 virtualenv
  • 不弹出标准对话框

    我有一个带有 TSaveDialog 的表单 当调用 Execute 函数时 从 IDE 运行时它不会弹出 它does独立运行时弹出 进一步测试后 我发现所有 TSave TOpen 对话框都不起作用 不工作意味着 Execute 返回Fa
  • 有没有办法让图像通过 ASP.NET 和 app_offline.htm 显示?

    当使用ASP NET的app offline htm功能时 它只允许html 但不允许图像 有没有办法让图像显示无需将他们指向另一个网站上的不同网址 是的 它只是不能来自具有 app offline htm 文件的网站 该图像必须托管在其他
  • 如何向 Symfony/Monolog 日志输出添加附加信息(主机、URL 等)?

    我正在开发我的第一个基于 Symfony 的 WebApp 项目 我已将 Symfony 配置为不仅将日志消息写入不同的日志文件 而且还立即以电子邮件形式发送关键错误消息 这很好用 不过 我想在默认日志消息中添加一些附加信息 以便更轻松地找
  • 是否可以在从模板扩展的天蓝色管道 yml 中使用变量?

    我们正在使用扩展功能以安全的方式重用管道中的模板 为了更轻松地定义模板的参数 我想使用变量 但我觉得这是不可能的 但由于我在官方文档中找不到答案 所以我在这一轮中询问 我的 yml 文件如下所示 name Date yyyyMMdd Rev
  • 在 OSmnx 中将街道划分为更小的路段

    是否可以在 OSmnx 中将街道段划分为更小的部分 例如 假设我们要将一条街道划分为 10 米的路段或将一条街道划分为 10 个相等的部分 G ox graph from place Piedmont California USA netw
  • 通过 VPN 连接到 Flask 应用程序

    我是 Flask 新手 如果问题听起来微不足道 请不要介意 我有一个 Flask 应用程序 不是我编写的 当我直接连接到网络时 它可以在本地计算机和远程计算机上正常工作 但是当我通过 VPN 连接到该应用程序时 它不起作用 我可以在那台机器
  • 如何更改 Ember 中的查询参数?

    我正在编写一个动作处理程序route application actions changeFoo foo I want to change the fooId queryParam to foo get id 问题是我能找到的唯一记录的更改
  • 如何杀死Postgresql中的空闲连接?

    我正在使用 java servlet 和 pgadmin 9 1 问题是 servlet 中的连接未正确关闭 因此如果达到最大连接 它会导致空白屏幕 我不希望每个用户都扩展 pgadmin 中的最大连接 i在 servlet 的起始点和结束
  • 多重继承的机制与构建灵活设计的模板相比

    这是一个更窄的版本question https stackoverflow com questions 32549573 understanding the exposition of alexandrescu about the weak
  • 如何了解 Firebase 工具的当前版本

    在 node js 命令提示符下 使用 firebase help 给出这个列表 Usage firebase options command Options V version output the version number P pr
  • 使用 MSBuild 构建解决方案文件夹

    我们有一个解决方案文件其中包含一些解决方案文件夹 库 单元测试 应用程序等 With 视觉工作室2010 https en wikipedia org wiki Microsoft Visual Studio 2010我们可以通过右键单击给
  • 将进度条添加到 gdal.Warp()

    我试图找出一种在 gdal Warp 中使用进度条来显示工作完成情况的方法 对于进度条 我使用 Tqdm 和 gdal Warp 用于从远程 URL 裁剪图像 def getSubArea url vsicurl url vsicurl u
  • 如何在 Struts 2 的单个视图中使用多个表单/操作

    我有一个显示在每个页面上的搜索框 搜索框的 JSP 代码通过图块插入到每个页面中 搜索框有一个表单和一个操作类SearchAction它需要为下拉框预加载一些属性 这SearchAction类有一个input 方法 它执行此初始化 一些页面