Primefaces自动完成转换器与验证器

时间:2015-01-30 22:20:51

标签: validation jsf primefaces autocomplete

请感谢您对此问题的帮助。我有一个带有抽象转换器的自动完成功能。通常,它运行良好,除非我使用验证器或f:验证器。当我将验证器放在自动完成时,它会转到通用转换器,但它不是返回对象,而是始终将id值放在自动完成输入中。通常,它通过放置对象并在itemLabel中引用类的属性来完成此流程。但只有当我放置一个验证器时,行为才是放入id,通过直接放入id来使系统不安全。可能是什么问题呢。

这是自动填充代码:

 <p:autoComplete id="menuAutoComplete"                             
                                dropdown="true"
                                value="#{menuBean.entity.menu}" 
                                var="menu"
                                itemLabel="#{menu.name}" 
                                itemValue="#{menu}"
                                completeMethod="#{menuBean.completeMenu}"
                                converter="#{menuBean.converter}"
                                forceSelection="false" 
                                required="#{menuBean.menuNeeded}"
                                size="100"
                                validator="menuValidator"
                                >
                    <p:ajax event="itemSelect"
                            listener="#{menuBean.handleSelectMenu}" 
                            update="systemOutputLabel, systemOutputPanel, moduleOutputLabel, moduleOutputPanel"
                            oncomplete="PF('modulebui').show();PF('systembui').show()"
                            />

这是通用或抽象的转换器:

public class GenericConverter implements Converter {

protected EntityService service;

@Autowired
public void setService(EntityService service) {
    this.service = service;
}

@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
    if (value == null || value.length() == 0) {
        return null;
    }
    Long id = Long.parseLong(value);
    return service.find(id);
}

@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
    return value instanceof BaseEntity ? ((BaseEntity) value).getId().toString() : "";
}
}

这是验证器:

@Component
@Scope("request")
@FacesValidator("menuValidator")
public class MenuValidator implements Validator {

@Autowired
UsuarioService usuarioService;
@Autowired
MessagesController messagesController;

@Override
public void validate(FacesContext fc, UIComponent uic, Object value) throws ValidatorException {
    if(value == null){
        return;
    }

    Menu menu = (Menu) value;

     if(menu.getNombre().equals("Menu1") ){
        FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "test error",
                "test error");
        throw new ValidatorException(msg);
    }

}
}

提前感谢,

0 个答案:

没有答案