gpt4 book ai didi

jsf - 我如何定位 h :message to the right of a h:inputText?

转载 作者:行者123 更新时间:2023-12-04 13:38:58 25 4
gpt4 key购买 nike

我的 xhtml 页面代码:

<h:outputLabel value="Email address: " />
<h:inputText id="email" value="#{userBean.emailAddressBeingEdited}" required="true" requiredMessage="*" />
<h:message for="email" id="emailM"/>

我的Java代码:
FacesContext.getCurrentInstance().addMessage("email", new FacesMessage("Email already in use"));

我尝试将 h:message 嵌套在 h:inputText 中,但这不起作用。如果我需要提供更多信息,请询问。

最佳答案

您在 addMessage() 中指定的客户端 ID必须是真正的客户端 ID,而不是组件 ID。输入组件的客户端 ID 通常以父表单组件的 ID 为前缀。对于尚未记住哪些 JSF 组件实现的初学者 NamingContainer 以及如何生成客户端ID,找出真实客户端ID的最简单方法是在浏览器中打开页面,查看其源代码并找到生成的HTML <input type="text">元素,最后取其 id .如果您给了 <h:form> formId的ID ,它将是 formId:email .这是您需要在 addMessage() 中指定的真实客户端 ID .

context.addMessage("formId:email", message);

如果您没有指定正确的客户端 ID,则消息将保持未处理状态。如果 JSF 项目阶段设置为 Development ,然后 JSF 会自动将其附加到正文末尾的“未处理消息”列表中。这就是你所看到的。查看生成的HTML源码自己看,是自动生成的HTML列表 <ul id="javax_faces_developmentstage_messages"> .

无关 对于具体问题,您似乎是在 JSF bean action 方法中进行验证。这不是正确的方法。您应该使用 Validator为了这。这样您就无需担心客户端 ID。你只需要抛出一个 ValidatorExceptionFacesMessage .例如。
@FacesValidator("uniqueEmailValidator")
public class UniqueEmailValidator implements Validator {

@Override
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
// ...

if (emailIsAlreadyInUse) {
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Email is already in use", null));
}
}

}

然后您注册为 <f:validator validatorId="uniqueEmailValidator" />输入组件内部。

关于jsf - 我如何定位 h :message to the right of a h:inputText?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10565567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com