Struts2 web uygulamasında (JQuery eklentisi ile) Ajax doğrulama kullanmaya çalışıyorum ve bir sorunum var.Struts 2 jsonValidationWorkflowStack ve Model Driven ile Ajax Validasyon
@Validations ek açıklamalarını kullanırken problemlerim vardı, bu yüzden validate() yöntemini geçersiz kıldım ve şimdi doğrulama sırasında tüm xhtml formlarım ile iyi çalışıyor. FieldsErrors iyi alınan ve gui yazdırılır. Gerçek şu ki, form doğrulandığında, eylemi başlatmak için sunucuya ikinci bir POST gönderilir. Ama neden bilmiyorum, çerçeve modelin niteliklerini belirlemiyor ve Eylemin yürütülmesinden sonra HTML yanıtının oluşturulması sırasında, çerçeve özniteliklere erişemiyor (sadece jsonValidationWorkflowStack kullandığımda).
Bir basit örnek oluşturduk:
Eylem
@Namespace("/actions")
@ParentPackage("actions")
@InterceptorRef(value = "jsonValidationWorkflowStack")
public class ActionTest extends ActionSupport implements
ModelDriven<ModelTest>, ParameterAware {
private static final long serialVersionUID = 1L;
private ModelTest model;
private Map<String, String[]> parameters;
public ActionTest() {
model = new ModelTest();
}
@Action(value = "actionTest", results = {
@Result(name = SUCCESS, location = "/jsp/win.jsp"),
@Result(name = ERROR, location = "/jsp/loose.jsp"),
})
public String executeAction1() throws Exception {
System.out.println("pass: "+getModel().getPass()); //the field is always null
if ("test".equals(getModel().getPass()))
return SUCCESS;
return ERROR;
}
@Override
public ModelTest getModel() {
return model;
}
@Override
public void validate() {
String field;
if (parameters.get("pass") != null) {
field = parameters.get("pass")[0];
if (field == null || field.isEmpty())
addFieldError("pass", "the field is not set");
else if (!"test".equals(field))
addFieldError("pass", "the password is \"test\"");
}
}
@Override
public void setParameters(Map<String, String[]> arg0) {
this.parameters = arg0;
}
}
Modeli
public class ModelTest {
private String pass;
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
}
Formu
Bu örnekte<s:form action="actionTest" theme="xhtml">
<s:textfield name="pass"/>
<sj:submit validate="true"/>
</s:form>
: - Hep şifre "test" ise bile loose.jsp yönlendirilir ediyorum - Bu eylem tarafından yönlendirilir başka jsp bir yazdırmak isterseniz, ben hiçbir şey (bile gördüm modelde varsayılan bir değer ayarladım).
Bana yardım edebilir misiniz lütfen?
PS: Benim kötü İngilizce için üzgünüm:/
ne olacak ekleyerek? Neden bu engelleyiciyi kullanıyorsun biliyor musun? Tanımladığınız aynı kullanım tablosunu kullanıyorum ve her şey iyi çalışıyor mu? İşleminizi @valid yoluyla da doğrulayabilirsiniz. Model özellikleriyle iyi çalışır. –
Sorun, bununla ilgili olabilir: http://stackoverflow.com/a/21021131/1654265 –