【问题标题】:Updated values of JSF UIComponentsJSF UIComponents 的更新值
【发布时间】:2011-01-15 10:05:19
【问题描述】:

我有一个带有 3 个选项和 inputTextArea 的单选选项的页面。当我按下页面上的提交按钮时,我需要进行一些验证...为了做到这一点,我在收音机上放了一个验证器。问题是在执行验证器时,我需要inputTextArea 和无线电的值,但它们带有旧值,而不是在页面提交之前在页面上定义的值。

示例:String.valueOf(textArea.getValue()).equals("")) 第一次提交时,代码String.valueOf(textAreaOcorrencia.getValue()) 是null,但由于textArea 是空的,它应该是一个空字符串。当它第二次提交时,它具有它在第一次提交时应该具有的值。我知道这与JSF生命周期有关,但不知道如何更新这些值?

【问题讨论】:

    标签: java jsf application-lifecycle


    【解决方案1】:

    在应用请求值阶段,提交的值将被设置为submittedValue。在验证阶段,提交的值将被验证和转换并设置为value。当组件出现在组件树中时,组件按从上到下的顺序进行验证。

    因此,如果有问题的组件实际上出现在组件树中的当前组件之后,则您需要通过UIInput#getSubmittedValue() 而不是UIInput#getValue() 获取其值。

    要了解有关 JSF 生命周期的更多信息,您可能会发现 this self-practice article 很有用。

    【讨论】:

    • 嗨,我这样解决了我的问题:不是以这种方式获取 UiComponente 的值 UIComponent UI = view.findComponent(idComponent); if (UI instanceof HtmlSelectOneRadio){ HtmlSelectOneRadio radio = (HtmlSelectOneRadio) UI;返回电台; } ... String.valueOf(radio.getValue()).equals(一些对象)
    • 我这样做了:Iterator it = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterNames(); while(it.hasNext()){ String requestParameterName = it.next(); if(requestParameterName.equals(idComponent)){ parameterValue = request.getParameter(requestParameterName);这里循环中的 idComponent 是你必须在你的 jsp、xhtml、任何页面中指定的 HTML 标记 ID,否则 JSF 每次都会创建一个随机 id,然后你将无法获得你需要的 UiComponent .
    • 这确实是解决问题的另一种方法(实际上:解决方法)。从 JSF 引擎的深处提取原始 servlet 请求参数映射,JSF 本身已经将其设置为组件的提交值。例如,您是否了解为什么您的方法最初不起作用以及为什么我提出的解决方案可以解决您的问题?这一切让我有点感叹:/
    猜你喜欢
    • 1970-01-01
    • 2011-11-01
    • 2014-06-21
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 2014-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多