应用请求阶段和请求参数

时间:2015-08-09 07:03:04

标签: jsf jsf-2 components renderer

考虑以下HtmlBasicRenderer类的片段:

 Map<String, String> requestMap =
              context.getExternalContext().getRequestParameterMap();
        // Don't overwrite the value unless you have to!
 String newValue = requestMap.get(clientId);
 if (newValue != null) {
      setSubmittedValue(component, newValue);
      if (logger.isLoggable(Level.FINE)) {
            logger.log(Level.FINE,
                   "new value after decoding {0}",
                   newValue);
      }
 }

该片段在decode(FacesContext context, UIComponent component)方法中出现,该方法负责提取请求参数并在应用请求阶段将其分配给组件。

我的问题是关于如何生成此请求参数?如果我们在其中有简单的html - 形式和标准html input,那就是:

<form method="POST">
    <input name="name" value="value" />
</form>

我们将获得name=value参数对。

因此,我们为我们正在编写的组件指定请求参数 key 的唯一方法是指定name属性它的渲染器encode方法中的元素。一旦我们这样做,我们就可以从解码方法访问相应的参数。

更新: 我正在编写一个继承自UISelectOne的组件,但所选项目可能包含更多的一个输入字段(两个在特定情况下) 。它的声明看起来像下面的内容(细节似乎并不重要):

<stcomutil:selectOne key="#{myBean.key}" value="#{myBean.value}">
    <stcomutil:selectOneItem />
    <stcomutil:selectOneItem />
    <stcomutil:selectOneItem />
</stcomutil:selectOne>

<stcomutil:selectOneItem />呈现为两个input type="text"

enter image description here

        ^                       ^
        |                       |
        |                       |
   the key field          the value field

所以,实际上我将有3行这样的输入,我需要处理唯一的行用户类型。再次,我省略了禁用输入的细节等等。

我想学习:要处理额外的值输入(转换,验证,更新等),我只需要为该附加输入指定name属性,然后在Apply请求阶段提取它,对吧?此外,在更新模型阶段,我必须使用ValueExpression展示为该绑定提取getValueExpression对象,并使用setValue方法为其分配值。

0 个答案:

没有答案