gpt4 book ai didi

java - POST 请求不会使用 Struts 2 中的 ModelDriven 将表单值加载到模型中

转载 作者:行者123 更新时间:2023-11-29 08:54:09 30 4
gpt4 key购买 nike

我正在尝试使用 ModelDriven 创建动态 Web 应用程序与 Struts 2 的接口(interface)。我使用过 Struts1,但这是我第一次尝试 Struts 2。

我能够从数据库中存储的值填充表单,但是当我修改值并尝试更新数据库时,表单值没有加载到模型中。

我已经上传了整个项目here (此时它确实需要一个 MySQL 数据库来运行)。

加载项目后:

  1. 转到 http://localhost/Vikos/secure/user .
  2. 您将被引导至登录页面。输入:logon email = consumer@test.compassword = password .
  3. 您将被带到 User页面上有一个从数据库填充的表单。如果您更新姓氏字段并点击 <Update>按钮,它应该更新数据库中的值,但不会传回该值。

如何从 HTML 表单中获取值到模型中?

更新:

我重新命名了这篇文章并稍微修改了内容以更准确地描述正在发生的事情。我还在 UserAction.prepare() 中添加了一些调试代码方法。看起来 Struts2 正在尝试加载 UserModel字符串数组 ( parmValues ) 的属性,而不是参数数组的第一个元素 ( correctVal )。

public void prepare() throws Exception {

// BEGIN - ADDED FOR DEBUGGING PURPOSES
Map parameters = request.getParameterMap();
Set keys = parameters.keySet();
Iterator iter = keys.iterator();
String key;
String[] parmValues;
while (iter.hasNext()) {
key = iter.next().toString();

parmValues = (String[])(String[])parameters.get(key);
if (parmValues.length == 1) {
String correctVal = parmValues[0];
System.out.println(correctVal); // This is printing out the correct updated form values.
}
}
// END - ADDED FOR DEBUGGING PURPOSES

determineCrudType();
}

13:21:42.773 [http-bio-80-exec-7] ERROR c.o.x.i.ParametersInterceptor

  • Developer Notification (set struts.devMode to false to disable this message): Unexpected Exception caught setting 'email' on 'classcom.codedeart.vikos.action.UserAction: Error setting expression'email' with value '[Ljava.lang.String;@7e227c19'

13:21:42.775 [http-bio-80-exec-7] ERROR c.o.x.i.ParametersInterceptor

  • Developer Notification (set struts.devMode to false to disable this message): Unexpected Exception caught setting 'firstName' on 'classcom.codedeart.vikos.action.UserAction: Error setting expression'firstName' with value '[Ljava.lang.String;@378da3ff'

13:21:42.776 [http-bio-80-exec-7] ERROR c.o.x.i.ParametersInterceptor

  • Developer Notification (set struts.devMode to false to disable this message): Unexpected Exception caught setting 'lastName' on 'classcom.codedeart.vikos.action.UserAction: Error setting expression'lastName' with value '[Ljava.lang.String;@3409d6d7'

13:21:42.778 [http-bio-80-exec-7] ERROR c.o.x.i.ParametersInterceptor

  • Developer Notification (set struts.devMode to false to disable this message): Unexpected Exception caught setting 'middleName' on 'classcom.codedeart.vikos.action.UserAction: Error setting expression'middleName' with value '[Ljava.lang.String;@13b29db7'

更新 2:

看起来这个问题与使用自定义类型转换器修复它的其他人报告的问题类似。我试图基于此 tutorial 实现自定义类型转换器.作为我的 UserTypeConverter 上的方法,我还没有真正进行任何类型转换。没有开火。我已将最新代码上传到 BitBucket。

附言:

我的 JSP 和后端 Struts 实现有问题。答案是遵循下面 Uchenna 和 Roman 提供的建议。我会不断更新我在 BitBucket 中的项目,希望其他人不会犯这些错误。

最佳答案

您错误地将表单映射到 user 操作。 user 操作映射到 default 命名空间,但表单映射到 /modelDriven 命名空间。因此,当您提交表单时,您应该会收到 404 错误。从应该是 struts 标签的 form 标签中删除 namespace 属性。如果您没有设置表单标签的命名空间属性,该操作可能会使用默认命名空间。关于 namespace 及其配置的更多信息,您可以找到 here .替换代码

<s:form accept-charset="UTF-8" action="user" method="POST" theme="simple">

请注意,为表单添加简单 主题不会影响 HTML 设计。此外,如果您在开发人员模式下运行,如果正确映射了 struts 表单标记中的操作,则警告应该会消失。

另请注意,Java 中的字符串与equals 方法进行比较,而不是==。因此,crudType 变量可能不会更改,并且会阻止更新操作。

关于java - POST 请求不会使用 Struts 2 中的 ModelDriven 将表单值加载到模型中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21213649/

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