в Разширено 

Преглед на въпрос

НачалоПреглед на въпрос:
Вход

JSF - Валидатор и Jboss Seam. Как се подават параметри?

Здравейте,
Става дума за Jboss SEAM + JSF + Facelets.
Има ли начин да подам параметър на валидатор който е също и SEAM компонент?
Валидатора не е обявен във faces-config.xml

Валидатора е маркиран с анотация на SEAM за да не го обявявам във faces-config.xml.

@org.jboss.seam.annotations.faces.Validator(id = "myValidator")
@Name("myValidator")
public class myValidator implements Validator, Serializable {
    private int min;
...........................................
}

Въпроса е как да напълня "min" от JSF страницата?

В момента така викам валидатора, но не става, параметъра не се пълни.
<h:inputText id="someName" value="#{bean.name}" required="true">
<f:validator validatorId="myValidator" >
     <f:param id="min" value="2"/>
</f:validator>
</h:inputText>
Познавате ли някой, който може да отговори? Помолете го за помощ
Отговори: 1
Подреди по: дата рейтинг
Снимка kuku
17:47/08.01.2010
Няма
Трябва да си направиш собствен facelet таг.
Направи си файл с име myvalidators.taglib.xml и го сложи в клас пътя на следното място
/META-INF/myvalidators.taglib.xml и със следното съдържание
<?xml version="1.0"?>
<!DOCTYPE facelet-taglib PUBLIC
"-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN" "facelet-taglib_1_0.dtd">
<facelet-taglib>
    <namespace>http://example.com/jsf/my/validators</namespace>
    <tag>
        <tag-name>myValidator</tag-name>
        <validator>
            <validator-id>myValidator</validator-id>
        </validator>
    </tag>
</facelet-taglib>


Важно е файла "myvalidators.taglib.xml" да е разположен във /META-INF/ директорията някъде в клас пътя, за да може фейслетите да я открият (autodiscover). Това се нарича "well known location" за библиотеки на фейслетите. Също важно е суфикса на файла да е ".taglib.xml".

Правиш си собствен валидатор и го маркираш със SEAM анотациите. Напиши си твой код, който да валидира едит полето. Можеш да използваш новото си поле от валидатора, тъй като то трябва автоматично да е инициализирано.

package com.example.validators;

import org.jboss.seam.annotations.Name;
import org.jboss.seam.ScopeType;

import javax.faces.context.FacesContext;
import javax.faces.component.UIComponent;
import javax.faces.validator.ValidatorException;
import javax.faces.application.FacesMessage;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;
import javax.faces.component.UIComponent;
import java.io.Serializable;

@org.jboss.seam.annotations.faces.Validator(id = "myValidator")
@Name("myValidator")
public class MyCustomValidator implements Validator, Serializable {
    private int exampleProp;

    public void validate(FacesContext facesContext, UIComponent c, Object o) throws ValidatorException {
        if (...condition...) {
            throw new ValidatorException(new FacesMessage(...whatever...  ));
        }
    }
    public int getExampleProp() {
        return exampleProp;
    }

    public void setExampleProp(int exampleProp) {
        this.exampleProp = exampleProp;
    }



Анотирането на валидатора със seam анотациите ти спестява обявяването му във faces-config.xml файла. Твоите атрибути от xhtml страницата се връзват автоматично към полетата на валидатора(autowired).

Във XHTML може да използваш валидатора по този начин:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:s="http://jboss.com/products/seam/taglib"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:a4j="http://richfaces.org/a4j"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:my="http://example.com/jsf/my/validators">

                <h:inputText id="someField" value="#{somebean.name}" 
                                   required="true">
                    <my:myValidator exampleProp="100"/>
                </h:inputText>

</ui:composition>


Вашето мнение:
Моля, използвайте системата за рейтинг. Вашето мнение е от значение!
Ако не сте намерили, каквото тъсите, можете да зададете Вашия въпрос тук
Задай въпрос
iPad
Подобни въпроси:
| Начална страница | Зала на славата | Регистрация | Вход | Правила за ползване | Политика за поверителност | Помощ | Контакти | RSS |
spravka.bg  |  subtitri.net  |