我有一个旨在编辑持久实体的某些字段的页面。该页面采用 GET 请求参数,该参数是我的实体的持久 ID。
<f:metadata>
<f:viewParam name="streamid" value="#{editStreamController.stream}"
converter="#{editStreamController.streamConverter}" />
</f:metadata>
转换器用于通过从持久性服务加载它来将 id 转换为实体,如here中所述。
该页面包含一个用于编辑“流”实体的某些字段的表单。我使用 OmniFaces<o:form includeViewParams="true">
以便action
在表单的字符串中包含我的 GET 参数:
<o:form includeViewParams="true" >
...
<h:inputText id="name" value="#{editStreamController.stream.name}" >
<f:validator binding="#{editStreamController.validator}" />
</h:inputText>
...
在某些情况下,当表单发布时,f:viewParam
负责实体和h:inputText
处理实体字段的双方都必须通过解码、验证和模型更新阶段,以便首先使实体可用,然后更新其字段。对我来说,设置immediate="true"
for是很自然的f:viewParam
,以便首先设置它的值,因此以后可以避免 UIInputs 的空指针问题,如"#{editStreamController.stream.name}"
. 但是根据javadoc,该immediate
设置与UIViewParameter
.
那么为什么该immediate
设置不可配置UIViewParameter
,是否有针对这种情况的解决方法?提前非常感谢!