gpt4 book ai didi

java - 将列表从 JSP 重新填充到 Struts 2 中的操作

转载 作者:行者123 更新时间:2023-11-29 08:52:28 25 4
gpt4 key购买 nike

我正在使用 Struts 2 框架,我想将对象列表从 Java 传输到 JSP,然后再传输回 Java。使用 <s:iterator> 可以很好地转移到 JSP标签。转移回 Java 不会,我的列表从未被填充。

我已经检查了这些问题:

并听从了他们的建议。

这是我的“项目”类(它具有比名称更多的属性,但我只显示相关的):

类(class)项目:

    private String name;

public Item(){}

public String getName(){ ... };
public void setName(String newName){ ... };

在我的 JSP 上我有:

<s:iterator value="items" status="key">
<s:hidden name="items[%{#key.index}].name" value="%{name}" />
</s:iterator>

这是 Action 类的相关部分:

private  List<Item> items = new ArrayList<Item>();

public List<Item> getItems()
{
System.out.println("now getting Items");

if(Items == null)
{
System.out.println("Items is null");
}
else
{
System.out.println("Items is not null. size: " + Items.size());
}

return Items;
}

public void setItems(List<Item> Items)
{
System.out.println("now setting Items");

Items = Items;
}

我 100% 确定它具有所有必要的 getter 和 setter,因为 JSP 已正确填充,并且当我提交表单时,我实际上可以看到(带有日志语句)我的 getItems()为我列表中的每个项目调用一次方法(对于表单中的每个输入字段)。奇怪的是,Struts2 为表单中的每个隐藏输入字段获取一次列表,但随后拒绝创建 Item 对象并将其名称设置为其中的任何给定值。问题不可能是缺少无参数构造函数。

我还添加了一个名为 ActionName-conversion.properties 的转换文件(其中 ActionName 是我的操作类的名称)并且它与我的 ActionName.java 在同一个文件夹中类。

Element_items = Item
CreateIfNull_items = true

可能出了什么问题?

最佳答案

如果您使用 ListMap 作为项目集合,您可以通过索引引用其元素,而无需使用 ObjectTypeDeterminer。见

Built in Type Conversion Support

Type Conversion is implemented by XWork.

XWork will automatically handle the most common type conversion foryou. This includes support for converting to and from Strings for eachof the following:

  • String
  • boolean / Boolean
  • char / Character
  • int / Integer, float / Float, long / Long, double / Double
  • dates - uses the SHORT format for the Locale associated with the current request
  • arrays - assuming the individual strings can be coverted to the individual items
  • collections - if not object type can be determined, it is assumed to be a String and a new ArrayList is created

Note that with arrays the type conversion will defer to the type ofthe array elements and try to convert each item individually. As withany other type conversion, if the conversion can't be performed thestandard type conversion error reporting is used to indicate a problemoccurred while processing the type conversion.

  • 枚举
  • BigDecimal 和 BigInteger

如果您想使用高级类型转换,使用 ObjectTypeDeterminer 来确定在填充集合时实例化的对象类型,或者通过 OGNL 中元素的键属性从集合中检索的对象你应该看到的表达

Collection and Map Support

Collection and Map support provides intelligent null handling and typeconversion for Java Collections.

The framework supports ways to discover the object type for elementsin a collection. The discover is made via an ObjectTypeDeterminer. Adefault implementation is provided with the framework. The Javadocsexplain how Map and Collection support is discovered in theDefaultObjectTypeDeterminer.

This ObjectTypeDeterminer looks at the Class-conversion.properties forentries that indicated what objects are contained within Maps andCollections. For Collections, such as Lists, the element is specifiedusing the pattern Element_xxx, where xxx is the field name of thecollection property in your action or object. For Maps, both the keyand the value may be specified by using the pattern Key_xxx andElement_xxx, respectively.

From WebWork 2.1.x, the Collection_xxx format is still supported andhonored, although it is deprecated and will be removed eventually.

Additionally, you can create your own custom ObjectTypeDeterminer byimplementing the ObjectTypeDeterminer interface. There is also anoptional ObjectTypeDeterminer that utilizes Java 5 generics. See theAnnotations page for more information.


您可以使用ActionClass-conversion.properties 并指定类型转换所需的所有属性。如果您没有指定某些属性,则会应用默认值。

在您的情况下,您没有指定关键属性,即 KeyProperty_items,在这种情况下,使用 Itemid 属性.如果您没有此类属性,转换可能会失败。

也可以使用注释进行类型转换。查看示例

另请注意使用 OGNL 表达式对字段名称使用正确的语法,该表达式使用对象引用索引,而不是集合索引引用。这种索引非常适用于列表。它还可以使用高级类型转换。

为什么它起作用不在这个问题的主题之内。当然,您可以修复您的属性并使用高级类型转换,或者删除它并使用像列表一样的索引集合。

关于java - 将列表从 JSP 重新填充到 Struts 2 中的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22067567/

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