验证集合属性的子项

时间:2016-03-11 11:17:48

标签: validation spring.net

我继承了一个大量使用Spring.NET的应用程序,包括验证。现在我正在试图弄清楚如何验证集合属性的子节点,所以给定这样的结构:

public class ParentObj
{
    public virtual ICollection<ChildObj> Children { get; set; }
}

public class ChildObj
{
    public virtual string SomeField { get; set; }
}

如何验证ParentObj.Children不为空且包含多于0个元素,然后验证每个ChildObj.SomeField的长度是否少于100个字符?我正在阅读文档,但我发现很难理解这个概念,因为没有像我这样的特定场景,这与上面的不同 - 但是有关春天如何验证集合的一些指导将会受到赞赏。

现在我正在尝试使用以下(基于xml)配置:

<v:group id="ParentObjValidator">
    <v:ref name="ChildObjValidator" />
    <v:condition test="Children != null and Children.Count > 0">
        <!-- message part -->
    </v:condition>
</v:group>

<v:group id="ChildObjValidator">
    <v:condition test="SomeField.Length <= 100" when="!string.IsNullOrEmpty(SomeField)">
        <!-- message part -->
    </v:condition>
</v:group>

编辑1

好的,我现在到了某个地方(thanks to this),并将我的配置修改为:

<v:group id="ParentObjValidator">
    <v:collection context="Children" when="Children != null and Children.Count > 0">
        <v:ref name="ChildObjValidator" />
        <!-- message part -->
    </v:collection>
</v:group>

<v:group id="ChildObjValidator">
    <v:condition test="SomeField.Length <= 100" when="!string.IsNullOrEmpty(SomeField)">
        <!-- message part -->
    </v:condition>
</v:group>

现在它似乎很满意......然而,我的预期失败并没有被提起,所以我不确定这些孩子是否真的被证实(或者我的规则是错误的)。

1 个答案:

答案 0 :(得分:0)

知道了!我错过了集合类型的include-element-errors="true"属性:

<v:group id="ParentObjValidator">
     <v:collection context="Children" when="Children != null and Children.Count > 0" include-element-errors="true">
        <v:ref name="ChildObjValidator" />
        <!-- message part -->
    </v:collection>
</v:group>

<v:group id="ChildObjValidator">
    <v:condition test="SomeField.Length <= 100" when="!string.IsNullOrEmpty(SomeField)">
        <!-- message part -->
    </v:condition>
</v:group>

现在似乎正在运行。