版本:
Aapche MyFaces 2.1.14
RichFaces 4.3.5
问题:
我正面临着很奇怪的标签问题。
如下面的代码所示,当第一次渲染from时,应该调用bean.getPassword
方法。
但似乎第一次呈现表单时(在回发之前)不会调用此方法。我通过调试验证了它。
奇怪的是,如果我把h:inputSecret
的EL放在页面的其他地方,这个方法就会被称为
我真的陷入困境,为什么会发生这种情况? 有人遇到过这样的问题吗?
代码:
<h:form prependId="false">
<!-- check whether getter is called , it gets called in this case -->
#{bean.password}
<h:panelGrid columns="2">
<h:outputText value="User ID:"/>
<h:inputText value="#{bean.userId}"/>
<h:outputText value="Password:"/>
<h:inputSecret id="passwd1" name="passwd1" required="true" value="#{bean.password}"
requiredMessage="Password is required"/>
<h:panelGrid>
</h:form>
答案 0 :(得分:1)
默认情况下,出于安全原因,<h:inputSecret>
不会重新显示模型值(原始密码在生成的HTML源中可见)。您需要将其redisplay
属性明确设置为true
。另见tag documentation(强调我的):
将组件的clientId渲染为&#34; name&#34;的值。属性。将组件的当前值渲染为&#34;值&#34;的值。属性,当且仅当&#34;重新显示&#34; component属性是字符串&#34; true&#34; 。如果&#34; styleClass&#34;指定了属性,将其值作为&#34; class&#34;的值。属性。
所以,这应该做:
<h:inputSecret ... redisplay="true" />
我希望您了解安全隐患。您通常只在提交表单并在其他字段上提供验证错误时执行此操作,以避免用户烦恼重新输入(有效?)密码。像这样:
<h:inputSecret ... redisplay="#{facesContext.postback and component.valid}" />