Как да предам втора стойност в JSF валидатора?

Имам прост формуляр за въвеждане на JSF в страница за редактиране и Валидатор, който проверява стойността за дублиране:

<td>Name</td>
<td>
    <h:outputText value="#{ud.name}"
                  rendered="#{not DCProfileTabGeneralController.editable}" />
    <h:inputText id="dcname" value="#{ud.name}" rendered="#{DCProfileTabGeneralController.editable}"
                 validator="#{ValidatorDatacenterController.validateDatacenterName}" autocomplete="off">
        <f:ajax event="blur" render="dcnamevalidator" />
    </h:inputText>
    <h:message id="dcnamevalidator" for="dcname" />
</td>

public void validateDatacenterName(FacesContext context, UIComponent component, Object value){
....
}

Интересувам се има ли възможен начин за изпращане на втора стойност, която ще се използва в процеса на валидиране?


person Peter Penzov    schedule 04.02.2013    source източник
comment
От действителния ви примерен код изглежда, че няма причина да изпращате друга стойност. Би било по-добре да обясните вашето функционално изискване, за да получите по-добри насоки или вашите мотиви да изпратите втори аргумент на валидатора.   -  person Luiggi Mendoza    schedule 05.02.2013


Отговори (2)


<f:attribute> идва на ум. Добавете такъв към входния текст и го извлечете в валидатора.

<h:inputText id="dcname".....
<f:attribute name="param" value="myparam" /> 
</h:inputText>

И:

String param = (String) component.getAttributes().get("param"); 

Може да получите стойността от EL. Късмет

person Karl Kildén    schedule 04.02.2013

Можете да добавите събитие postValidate за валидиране на множество полета, като например

<f:event listener="#{bean.validationMethod}" type="postValidate" />

това трябва да се задейства преди актуализации на модела и можете да получите новата стойност за различен компонент с

FacesContext fc = FacesContext.getCurrentInstance(); 
UIComponent components = event.getComponent();
UIInput param1 = (UIInput) components.findComponent("param1");
UIInput param2 = (UIInput) components.findComponent("param2");

Ако проверката е неуспешна, извикайте метода FacesContext renderResponse, за да пропуснете актуализацията на модела.

person Avinash Singh    schedule 04.02.2013
comment
Използвал съм това някои. Обичам да използвам f:ajax с това, така че не е необходимо да намирам компонента и тези неща. Този ofc изисква по-дълъг обхват от този на заявките - person Karl Kildén; 05.02.2013