【问题标题】:Form validation in JSFJSF 中的表单验证
【发布时间】:2014-05-28 22:17:32
【问题描述】:

我正在尝试在提交之前验证表单,但没有按预期工作。

这是我的 XHTML

<h:outputLabel for="name">Name: </h:outputLabel>
<p:inputText id="name"  value="#{partyCreationBean.name}" />
<h:message for="name"/>
<h:outputLabel for="symbol">Symbol: </h:outputLabel>

这是我的 webBean:

@ManagedBean(name = "partyCreationBean")
@RequestScoped
public class PartyCreationBean {

    @EJB
    PartyManagerLocal ejb_partymanager;
    @EJB
    AuthenticationManagerLocal ejb_user;

    private PartyDTO party = new PartyDTO();

    public String getName() {
        return party.getName();
    }

    public void setName(String name) {
        party.setName(name);
}

这是我的 DTO:

import org.hibernate.validator.constraints.*;

public class PartyDTO implements IDataTransferObject {
    private Integer id;
    @NotEmpty()
    private String name;

    //Getters, setters and other stuff.
}

现在的重点是,如果我将“名称”留空并按下按钮来创建我的派对,页面将保持不变,并且我在控制台堆栈跟踪中出现异常(很像往常:D)

我尝试使用这个 XHTML(添加 require="true"):

<h:outputLabel for="name">Name: </h:outputLabel>
<p:inputText id="name" required="true" value="#{partyCreationBean.name}" />
<h:message for="name"/>
<h:outputLabel for="symbol">Symbol: </h:outputLabel>

它运行良好,但我想将我的“约束”放在 DTO 级别......

提前致谢:)

【问题讨论】:

    标签: validation jsf bean-validation hibernate-validator


    【解决方案1】:

    @NotEmpty 不会那样工作..

    您需要为此构建 getter 和 setter:

    private PartyDTO party = new PartyDTO();
    

    然后你需要创建getter和setter来

    @NotEmpty
    String name; 
    

    然后在xhtml文件中..

    <p:inputText id="name"  required="true" value="#{partyCreationBean.party.name}" />
    

    它应该可以工作。当然,如果您将使用 required 就可以了..

    如果您还有其他问题,这也可以帮助您。有时需要添加的 jsf 参数很少: Bean Validation @NotNull, @NotBlank and @NotEmpty does not work in JSF+Tomcat

    【讨论】:

    • 好的,我解决了这个问题... :) 然后我只是问你一些如果可能的话...现在我也想为此设置一个唯一约束...我在持久层 a字段名称上的 JPA 注释“Column(nullable=false, unique=true)”。但是如果我输入相同的名称,它会在控制台上出现异常吗?我必须捕获异常并以某种方式显示消息还是有一些更简单的方式?!?!?再次谢谢你
    • 不确定我是否理解得很好。如果您像这样验证此值,则不必在持久层中也进行双重验证。如果您想在这种情况下处理异常(这种情况在当前流程中是不可能的)您只需要使用 try 包装对持久层的调用并从 jsf bean 中捕获用户的消息:FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, “致命!”,“系统错误”));类似的东西
    • 不不,问题出在唯一约束上,@NotEmpty 现在可以了。但现在我尝试这个解决方案。再次感谢你:)
    • 因此,如果您可以打开另一个问题并链接该主题,我会提供帮助.. 我猜我只是不明白您的意思。 NP
    猜你喜欢
    • 2013-04-17
    • 2015-12-10
    • 2019-07-15
    • 1970-01-01
    • 2012-12-14
    • 2011-02-22
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    相关资源
    最近更新 更多