我正在尝试使用ModelDriven
Struts 2 的界面创建一个动态 Web 应用程序。我使用过 Struts1,但这是我第一次尝试使用 Struts 2。
我能够从存储在数据库中的值填充表单,但是当我修改值并尝试更新数据库时,表单值没有被加载到模型中。
我已经在这里上传了整个项目(此时它确实需要一个 MySQL 数据库来运行)。
加载项目后:
- 去
http://localhost/Vikos/secure/user
。 - 您将被引导至登录页面。输入:
logon email = consumer@test.com
和password = password
。 - 您将被带到一个
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] 错误 coxiParametersInterceptor
- 开发人员通知(将 struts.devMode 设置为 false 以禁用此消息):在 'class com.codedeart.vikos.action.UserAction 上设置'email'时捕获意外异常:错误设置表达式'email',值为'[Ljava.lang.String ;@7e227c19'
13:21:42.775 [http-bio-80-exec-7] 错误 coxiParametersInterceptor
- 开发人员通知(将 struts.devMode 设置为 false 以禁用此消息):在 'class com.codedeart.vikos.action.UserAction 上设置'firstName'时捕获意外异常:错误设置表达式'firstName'的值为'[Ljava.lang.String ;@378da3ff'
13:21:42.776 [http-bio-80-exec-7] 错误 coxiParametersInterceptor
- 开发人员通知(将 struts.devMode 设置为 false 以禁用此消息):在 'class com.codedeart.vikos.action.UserAction 上设置'lastName'时捕获意外异常:错误设置表达式'lastName'的值'[Ljava.lang.String ;@3409d6d7'
13:21:42.778 [http-bio-80-exec-7] 错误 coxiParametersInterceptor
- 开发人员通知(将 struts.devMode 设置为 false 以禁用此消息):在“com.codedeart.vikos.action.UserAction 类”上设置“middleName”时捕获意外异常:设置表达式“middleName”时出错,值为“[Ljava.lang.String” ;@13b29db7'
更新2:
看起来这个问题与其他使用自定义类型转换器修复它的人报告的问题相似。我试图根据本教程实现自定义类型转换器。我还没有达到实际进行任何类型转换的地步,因为我的方法UserTypeConverter
没有触发。我已将最新代码上传到 BitBucket。
PS:
我的 JSP 和后端 Struts 实现有问题。答案是遵循 Uchenna 和 Roman 下面提供的建议。我将继续在 BitBucket 中更新我的项目,因此希望没有其他人需要犯这些错误。