【问题标题】:jsf get key/value parameters from GET requestjsf 从 GET 请求中获取键/值参数
【发布时间】:2013-01-31 16:45:28
【问题描述】:

在我的网络应用程序中,我无法使用单个验证器获取查询参数的键值。

我的网页:

    <f:metadata>
        <f:viewParam name="version" value="#{myBean.version}" 
            validator="#{myBean.inputValidator}" />
        <f:viewParam name="mobilemodel" value="#{myBean.mobileModel}" 
            validator="#{myBean.inputValidator}" />
        <f:event listener="#{myBean.preRenderViewEventHandler}"
            type="preRenderView" />
    </f:metadata>

我的组件验证功能:

public void inputValidator(FacesContext context, UIComponent component, Object value) throws ValidatorException {
        LOG.debug("Component: " + component);
        LOG.debug("Value: " + value);
    }

我在UIComponent 中找不到键值(例如version

一个很好的解决方案是为每个查询参数设置一个验证器函数。有没有办法理解参数的名称?

下一个问题:是否可以跳过所有 Validators 并为 myBean 设置值?我试过了,但是myBean.mobileModel中没有设置值

【问题讨论】:

    标签: jsf javabeans meta-tags validation query-parameters


    【解决方案1】:

    您可以通过UIComponent#getAttributes()获取所有组件属性。

    所以,应该这样做:

    String name = (String) component.getAttributes().get("name");
    // ...
    

    【讨论】:

    • 谢谢 Balus,明天我会试试的。如果我删除验证器=“#{myBean.inputValidator}”,您知道为什么 value="#{myBean.mobileModel}" 不起作用。未调用 setMobileModel。所以我需要使用验证器来设置我的变量的值。
    • 我不知道这个问题。它对我来说很好用。 SSCCE 以及有关环境的详细信息会有所帮助(这样我们 - 和您! - 可以通过复制'n'paste'n'在一个完全空白的游乐场项目中不加修改地运行它来重现完全相同的问题,所有内容都设置为默认值 - 除非另有说明)。