我的表单中有一个下拉列表,在验证失败时会出现问题。我在Preparable接口上使用xml验证。要访问下拉列表的数据,我需要从表单中传递一些ID。问题是当验证失败并且调用prepare()/ prepareInput()时,没有设置包括ID的类中的变量。 ID是不变的形式中的隐藏参数。请指教。 谢谢, 尤里
答案 0 :(得分:2)
prepare()与init()在许多其他框架中的作用相同,即调用它来初始化动作并填充与构造函数非常相似的角色。
似乎缺少某些东西......使用default-stack应该在调用验证之前设置操作上的所有参数。因此,如果客户端确实传递参数,我无法看到为什么或如何丢失任何参数,除非您的逻辑的某些部分清除它们。
有时需要获取其他对象作为动作中的字段,这些字段是从表单设置的值派生的,否则作为参数传入。在这种情况下,您希望准备在设置值后调用然后验证,如果此方案适用于您,则params-prepare-params堆栈是合适的。
就个人而言,我会将准备逻辑放入动作execute方法而不是prepare方法中。只有当我将多个动作放入单个类时,才能使prepare方法最合适,因为它会将重复内容归结为什么。然后params-prepare-params是一个特殊情况,虽然我会争辩说如果你使用DI它可能永远不需要使用它。
如果这没有帮助,请使用动作类/ xml映射(如果有)扩展您的问题并提供验证xml,以便我们可以看到为什么会发生这种情况。