我正在使用JAXB 2.0 JDK 6来将XML实例解组为POJO.
为了添加一些自定义验证,我已经将一个验证调用插入到属性的setter中,尽管它是私有的,但似乎unmarshaller不会调用setter但直接修改私有字段.
对我来说,每个unmarshall调用都会针对此特定字段进行自定义验证,这一点至关重要.
我该怎么办?
码:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "LegalParams", propOrder = {
"value"
})
public class LegalParams {
private static final Logger LOG = Logger.getLogger(LegalParams.class);
@XmlTransient
private LegalParamsValidator legalParamValidator;
public LegalParams() {
try {
WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();
LegalParamsFactory legalParamsFactory = (LegalParamsFactory) webApplicationContext.getBean("legalParamsFactory");
HttpSession httpSession = SessionHolder.getInstance().get();
legalParamValidator = legalParamsFactory.newLegalParamsValidator(httpSession);
}
catch (LegalParamsException lpe) {
LOG.warn("Validator related error occurred while attempting to construct a new instance of LegalParams");
throw new IllegalStateException("LegalParams creation failure", lpe);
}
catch (Exception …
Run Code Online (Sandbox Code Playgroud) 我使用了自定义验证器
protected void cvIsActive_ServerValidate(object source,ServerValidateEventArgs args)
{
if(args.Value.Length==1)
args.IsValid = true;
else
args.IsValid = false;
}
Run Code Online (Sandbox Code Playgroud)
这是服务器验证的代码..我已经写过检查是否已检查.我已控制验证为复选框
<asp:CustomValidator runat="server" ErrorMessage="Please Select Status"
ID="cvIsActive" Font-Size="Smaller"
onservervalidate="cvIsActive_ServerValidate" ControlToValidate="chkIsActive"></asp:CustomValidator>
Run Code Online (Sandbox Code Playgroud)
但是一旦页面加载就会给出错误
Control 'chkIsActive' referenced by the ControlToValidate property of 'cvIsActive' cannot be validated.
Run Code Online (Sandbox Code Playgroud) 我想使用customvalidator控件来处理我的所有验证,但我无法弄清楚如何在代码隐藏中设置错误消息以进行不同的检查.这可能吗?
我有一个自定义验证器,我试图输出错误信息,但它失败但无法这样做.有人可以告诉我,如果我在正确的地方这样做.
class User < ActiveRecord::Base
self.table_name = "user"
attr_accessible :name, :ip, :printer_port, :scanner_port
validates :name, :presence => true,
:length => { :maximum => 75 },
:uniqueness => true
validates :ip, :length => { :maximum => 75 },
:allow_nil => true
validates :printer_port, :presence => true, :if => :has_association?
validates :scanner_port, :presence => true, :if => :has_association?
def has_association?
ip != nil
end
end
Run Code Online (Sandbox Code Playgroud)
我有如下:
validates :printer_port, :presence => true, :message => "can't be blank", :if => :has_wfm_association?
Run Code Online (Sandbox Code Playgroud)
但是收到了一个错误
Unknown validator: …
Run Code Online (Sandbox Code Playgroud) 我有以下几片asp:
<asp:ValidationSummary ID="RegisterUserValidationSummary" runat="server" CssClass="failureNotification"
ValidationGroup="RegisterUserValidationGroup"/>
Run Code Online (Sandbox Code Playgroud)
...
<asp:Label ID="UserNameLabel" runat="server" AssociatedControlID="UserNameTB">Username:</asp:Label>
<asp:TextBox ID="UserNameTB" runat="server" CssClass="textEntry"></asp:TextBox>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" ControlToValidate="UserNameTB"
ValidationExpression="[a-zA-Z]{3,8}" ErrorMessage="Username must be between 3 to 8 chars" runat="server"
CssClass="failureNotification" ToolTip="Username must be between 3 to 8 chars" ValidationGroup="RegisterUserValidationGroup">
*</asp:RegularExpressionValidator>
<asp:CustomValidator ID="NoUserValidator" ControlToValidate="UsernameTB" runat="server" ErrorMessage="User Taken!" CssClass="failureNotification"
ValidationGroup="RegisterUserValidationGroup" OnServerValidate="UserValidate">*</asp:CustomValidator>
Run Code Online (Sandbox Code Playgroud)
然后功能:
protected void UserValidate(object source, ServerValidateEventArgs args)
{
SqlDataSource1.SelectCommand = "SELECT ClientID FROM [Clients] WHERE Username= '" + UserNameTB.Text + "'";
DataView dv = (DataView)SqlDataSource1.Select(DataSourceSelectArguments.Empty);
if (dv.Table.Rows.Count != 0)
args.IsValid = false; …
Run Code Online (Sandbox Code Playgroud) 我有一个下拉菜单,用户选择一个国家/地区.这是一个必需的"领域".
在它旁边,有一个名为State的文本字段.如果用户选择US,则需要字段State.如果用户选择例如瑞典,则不需要国家,因为瑞典没有州.
示例代码:
<asp:DropDownList runat="server" ID="Country"></asp:DropDownList>
<asp:RequiredFieldValidator ControlToValidate="Country"
runat="server" Display="Static" ErrorMessage="Required field" />
<asp:TextBox runat="server" ID="State"></asp:TextBox>
<asp:CustomValidator ClientValidationFunction="DoesntGetFiredIfStateIsEmpty"
runat="server" Display="Static" ErrorMessage="Required field" />
<!-- SO, RATHER THIS TOGETHER WITH CONDITIONAL FIRING -->
<asp:RequiredFieldValidator ControlToValidate="State"
runat="server" Display="Static" ErrorMessage="Required field" />
Run Code Online (Sandbox Code Playgroud)
我向您提出的问题是:如果CustomValidator为空,我该如何进行防火验证?
或者说更简单:如何有条件地使RequiredValidator火灾?
或者最简单:如何在客户端启用/禁用RequiredValidator?
我有一个自定义DataAnnotationsModelValidatorProvider,用于以更动态的方式进行模型验证,然后只添加属性.我试图将我的提供添加到global.asax.cs,如下所示:
ModelValidatorProviders.Providers.Clear();
ModelValidatorProviders.Providers.Add(new AttributeValidatorProvider());
Run Code Online (Sandbox Code Playgroud)
但是一旦我加载了表单,我就会收到一条错误消息:"不显眼的客户端验证规则中的验证类型名称必须是唯一的.以下验证类型不止一次出现:必需".
根据这篇博客的评论,这是因为Ninject重写了自定义验证器提供商.
我是MVC的新手,我似乎无法找到告诉Ninject接受我的自定义提供商的方法,我将如何解决这个问题?
为了记录:我不想使用Fluentvalidation.net,我想坚持使用默认的MVC验证(大多数情况下).
我正在开发一个我没有创建的ASP.NET MVC 2应用程序.在模型绑定期间修剪应用程序中的所有输入字段.但是,我想要一个NoTrim属性来阻止修剪某些字段.
例如,我有以下状态下拉字段:
<select name="State">
<option value="">Select one...</option>
<option value=" ">International</option>
<option value="AA">Armed Forces Central/SA</option>
<option value="AE">Armed Forces Europe</option>
<option value="AK">Alaska</option>
<option value="AL">Alabama</option>
...
Run Code Online (Sandbox Code Playgroud)
问题是当用户选择"国际"时,我得到验证错误,因为两个空格被修剪,State是必填字段.
这是我希望能够做到的:
[Required( ErrorMessage = "State is required" )]
[NoTrim]
public string State { get; set; }
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止所获得的属性:
[AttributeUsage( AttributeTargets.Property, AllowMultiple = false )]
public sealed class NoTrimAttribute : Attribute
{
}
Run Code Online (Sandbox Code Playgroud)
在Application_Start中设置了一个自定义模型绑定器:
protected void Application_Start()
{
ModelBinders.Binders.DefaultBinder = new MyModelBinder();
...
Run Code Online (Sandbox Code Playgroud)
以下是修剪模型活页夹的一部分:
protected override void SetProperty( ControllerContext controllerContext,
ModelBindingContext bindingContext,
PropertyDescriptor propertyDescriptor,
object value …
Run Code Online (Sandbox Code Playgroud) asp.net-mvc customvalidator custom-attributes model-binding data-annotations
我正在尝试实现一个.NET自定义验证器,它使用$ .ajax在同一页面上查询WebMethod并返回一个布尔值来指示结果是true还是false.
我使用的WebMethod非常简单
[WebMethod()]
public static bool IsPromoValid(string code)
{
string promoCode = "ABCDEFG";
bool result = code.ToLower() == promoCode.ToLower();
return result;
}
Run Code Online (Sandbox Code Playgroud)
CustomValidator看起来像这样
<asp:CustomValidator ID="cvPromoCode" Display="None" ControlToValidate="txtPromoCode" runat="server" ClientValidationFunction="validatePromo"
ErrorMessage="The promo code you entered is incorrect" OnServerValidate="ValidatePromoCode" />
Run Code Online (Sandbox Code Playgroud)
和简单的$ .ajax()ClientValidation函数
function validatePromo(src, args) {
$.ajax({
type: "POST",
url: "Register.aspx/IsPromoValid",
data: "{'code': '" + args.Value + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
args.IsValid = msg.d;
}
});
}
Run Code Online (Sandbox Code Playgroud)
问题是页面立即验证,实际上并没有等待ajax调用完成.如果页面上有任何其他错误,它会显示验证摘要,但从不显示自定义验证程序的错误消息.
我可以看到在Firebug中进行的AJAX调用,它会重新响应正确的响应(在这种情况下为true或 …
我有一个DTO类,例如,看起来像这样:
public class ExampleDto
{
[DataMember(Name = "Date", IsRequired = true, Order = 1), Required]
public DateTime Date { get; set; }
[DataMember(Name = "ParentExample", IsRequired = false, Order = 2, EmitDefaultValue = false)]
public Guid? ParentExampleId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
例如,如果用户提供的日期不正确,例如:
<?xml version="1.0" encoding="UTF-8" ?>
<ExampleDto xmlns="http://customurl/">
<Date>2012-05-25T18:23:INCORRECTDATE</Date>
<ParentExample>B62F10A8-4998-4626-B5B0-4B9118E11BEC</ParentExample>
</ExampleDto>
Run Code Online (Sandbox Code Playgroud)
或者只是一个空体,然后传递给动作的ExampleDto参数将为null(在前一种情况下,ModelState将有错误).
我将一个CustomValidationAttribute应用于该类,因此类声明如下所示:
[CustomValidation(typeof(CustomExampleValidator), "Validate")]
public class ExampleDto
Run Code Online (Sandbox Code Playgroud)
现在我添加了这个,如果ExampleDto参数为null(由于空体或序列化问题),则抛出ArgumentNullException:
<?xml version="1.0" encoding="UTF-8"?>
<Response xmlns="http://customurl" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Type>Failure</Type>
<Message>An unknown error has occurred</Message>
<Errors>
<Error>
<Message>System.ArgumentNullException</Message>
<MessageDetail>Value cannot be null. Parameter …
Run Code Online (Sandbox Code Playgroud) customvalidator ×10
asp.net ×5
c# ×2
validation ×2
.net ×1
asp.net-mvc ×1
checkbox ×1
java ×1
jaxb ×1
jquery ×1
ninject ×1
rspec2 ×1
setter ×1
webforms ×1