【问题标题】:How to validate bean property injected with @ManagedProperty without xml?如何在没有 xml 的情况下验证使用 @ManagedProperty 注入的 bean 属性?
【发布时间】:2012-09-28 02:20:18
【问题描述】:

我找到了很多讨论如何注入属性的主题,但没有一个建议验证方法。 这是我的豆子:

@ManagedBean
@RequestScoped
public class MyBean {       
    @ManagedProperty(value = "#{param.key}")
    private String keyFromUser;
}

目前如果我有 GET 参数中缺少 param.key

com.sun.faces.mgbean.ManagedBeanCreationException: An error occurred performing resource injection on managed bean myBean

【问题讨论】:

    标签: java validation jsf-2 annotations javabeans


    【解决方案1】:

    请改用<f:viewParam>。就像<h:inputText>,但是对于 GET 请求参数。因此,它允许通过validator 属性甚至<f:validator><f:validateXxx> 标签注册验证器。您甚至可以将<h:message> 附加到它。

    <f:metadata>
        <f:viewParam id="key" name="key" value="#{myBean.keyFromUser}" validator="myValidator" />
    </f:metadata>
    <h:message for="key" />
    

    您只需将@PostConstruct 作业移动到&lt;f:event type="preRenderView"&gt;

    另见:

    【讨论】:

    • 谢谢,但@PostConstruct 很好地抓住了它。我想尽可能多地使用注解。
    • 这太棒了。一直都知道 viewParam 标签,但直到现在我才完全掌握何时使用它。
    • @alehro:我想尽可能地使用正确的工具来完成这项工作。注释不是圣杯。
    • 我会赞成这个,因为我认为它更好地回答了这个问题。
    【解决方案2】:

    我很少使用 JSF-beans,所以我必须说我不了解您的功能要求。也许注释一个方法@PostConstruct 并在那里进行验证?那是我把依赖注入解决后需要做的事情放了

    作为一个不直接回答问题的旁注,我认为 CDI 对于这样的场景非常强大。

    看起来像:

    @Inject
    @RequestParam (validator = MyValidator.class)
    

    如果您有兴趣,我可以提供实际的完整实现

    【讨论】:

    • 我也是 JSF 的初学者。有趣的是我已经有了@PostConstruct 方法。但是异常描述有点误导,所以,我什至没有看堆栈跟踪。谢谢。
    • 如果您刚开始并且喜欢注释,请考虑仔细研究 CDI。很高兴我能帮上忙
    猜你喜欢
    • 2012-02-14
    • 2011-03-01
    • 1970-01-01
    • 2014-12-04
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多