gpt4 book ai didi

java - jsp 不显示 spring validator 错误

转载 作者:行者123 更新时间:2023-11-30 11:07:41 25 4
gpt4 key购买 nike

我正在使用 spring MVC 创建一个项目。我正在使用 jsr303 验证字段。它工作正常它在控制台中显示字段错误但在 jsp 页面中不显示任何人都可以让我知道我在这里做错了什么吗?

我的 Controller 方法是

@RequestMapping(value="/addCampaign", method = RequestMethod.POST)
public String processForm(@ModelAttribute(value="Campaign") @Valid CampaignEntity campaignObj,BindingResult result, ModelMap model, Principal principal) {

validator.validate(campaignObj, result);

if(result.hasErrors()){

System.out.println(result.getErrorCount());
System.out.println(result.toString());

CampaignEntity campaignBean = new CampaignEntity();

Map<String,String> agencies = new LinkedHashMap<String,String>();
agencies.put("1", "United Stated");
agencies.put("2", "China");
agencies.put("3", "Singapore");
agencies.put("4", "Malaysia");

model.addAttribute("agencies", agencies);
model.addAttribute("publishers", agencies);
model.addAttribute("Campaign", campaignBean);

return "addCampaign";
}else{
return campaign(model, principal);
}
}

在 jsp 中我使用标签显示错误

<form:errors path="*" cssClass="error" />

我的实体类是

package com.nativeunlock.dto;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.*;
import javax.validation.constraints.Digits;
import javax.validation.constraints.NotNull;

import org.hibernate.validator.constraints.NotEmpty;

import lombok.Data;
import lombok.Getter;
import lombok.Setter;


@SuppressWarnings("serial")
@NamedQueries({
@NamedQuery(
name = CampaignEntity.GET_CAMPAIGNS_QUERY,
query = "from CampaignEntity campaign"
),
@NamedQuery(
name = CampaignEntity.DELETE_CAMPAIGNS_QUERY,
query = "DELETE FROM CampaignEntity campaign WHERE campaign.campaign_id = :campaign_id"
)
})

@Entity
@Table(name = "campaign")
public class CampaignEntity implements Serializable {

public static final String GET_CAMPAIGNS_QUERY ="getCampaignList";
public static final String DELETE_CAMPAIGNS_QUERY ="deleteCampaignList";

@Id
@Getter
@Setter
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "campaign_id", unique = true, nullable = false)
private int campaign_id;

@Getter
@Setter
@Column(name = "name", unique = true)
@NotEmpty(message="Name field is mandatory.")
private String name;


@Getter
@Setter
@Column(name = "no_of_views")
@NotNull(message="No. of Views field is mandatory.")
private int no_of_views;

@Getter
@Setter
@Column(name = "video_url")
@NotEmpty(message="Video URL field is mandatory.")
private String video_url;

@Getter
@Setter
@Column(name = "start_date")
@NotEmpty(message="Start Date field is mandatory.")
private String start_date;

@Getter
@Setter
@Column(name = "end_date")
@NotEmpty(message="End Date field is mandatory.")
private String end_date;

@Getter
@Setter
@Column(name = "click_to_play")
@NotNull(message="Click to play field is mandatory.")
private int click_to_play;

@Getter
@Setter
@Column(name = "frequency")
@NotNull(message="Frequency field is mandatory.")
private int frequency;

@Getter
@Setter
@Column(name = "priority")
@Digits(fraction = 0, integer = 100)
@NotNull(message="Priority field is mandatory.")
private int priority;

@Getter
@Setter
@Column(name = "divice")
@NotNull(message="Divice field is mandatory.")
private int divice;

@Getter
@Setter
@Column(name = "operating_system")
@NotNull(message="Operating system field is mandatory.")
private int operating_system;

@Getter
@Setter
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "publisher_id")
@NotEmpty(message="Publisher field is mandatory.")
private PublisherEntity publishers;

@Getter
@Setter
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "agency_id")
@NotEmpty(message="Agency field is mandatory.")
private AgencyEntity agencies;

}

我的 validator 类是

package com.nativeunlock.Validator;

import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;

import com.nativeunlock.dto.CampaignEntity;

@Component
public class CampaignValidator implements Validator{

@Override
public boolean supports(Class c) {
return CampaignEntity.class.isAssignableFrom(c);
}

@Override
public void validate(Object command, Errors errors) {
CampaignEntity campaignBean = (CampaignEntity)command;
/*if(!regBean.getPassword().equals(regBean.getRePassword()))
errors.rejectValue("rePassword","password.notmatch");*/
}

}

最佳答案

问题在于,通过添加模型属性 model.addAttribute("Campaign", campaignBean);,您将从模型中删除绑定(bind)错误。

绑定(bind)错误绑定(bind)到经过验证的实例。如果您将断点设置到方法内的第一行并检查模型,您将看到一个带有键 Campaign 的已验证对象,还有一个带有键 org.springframework 的绑定(bind)错误对象.validation.BindingResult.Campaign

当您进一步移动并到达您在“Campaign”键下向模型添加新实例时,请注意绑定(bind)错误将从模型中删除,因为它们绑定(bind)的实例是不再存在,这就是您在 JSP 中看不到它们的原因。

删除 model.addAttribute("Campaign", campaignBean); 或更改 key ,您应该会看到绑定(bind)错误。

也不是说您不需要手动调用 validator.validate(campaignObj, result); @Valid 会为您调用验证

关于java - jsp 不显示 spring validator 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28827380/

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