FacesConverter:验证失败:值无效

时间:2015-11-08 10:03:22

标签: jsf converter

在使用我的自定义FacesConverter提交表单时,我收到以下异常。但AccountConverter的方法返回正确的值(id和account)。

transactionForm:account:Überprüfungsfehler:Wertistungültig。

这是我的帖子标题的德语和通讯员。

在我的项目中我使用JSF 2.2,所以我被迫使用@Named和@RequestScope来获得@EJB支持。

以下是我的实施:

AccountConverter.java

    @Named
    @RequestScoped
    public class AccountConverter implements Converter {

    /* CONSTANTS */

    private static final Logger LOGGER = Logger.getLogger(AccountConverter.class.getSimpleName());

    /* EJB */

    @EJB
    private AccountDaoImpl accountDao;

    //

    @PostConstruct
    public void onCreate() {
        LOGGER.info("+++ accountConverter");
    }

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String submittedValue) {

        if(submittedValue == null || submittedValue.isEmpty()) {
            return null;
        }

        // database access

        try {
            return this.accountDao.find(Integer.valueOf(submittedValue));
        }
        catch(Exception e) {
            e.printStackTrace();
            return null;
        }

    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object modelValue) {

        if(modelValue == null) {
            return null;
        }

        if(modelValue instanceof Account) {
            return Integer.toString(((Account) modelValue).getId());
        }
        else {
            throw new ConverterException(new FacesMessage(modelValue + " is not a valid account entity"));
        }
    }

    }

transaction.xhtml

    <!-- TRANSACTION -->
    <h:form id="transactionForm">

        <!-- ACCOUNT -->
        <div class="form-group">
            <label for="account">Account:</label>
            <h:selectOneMenu id="account" value="#{transactionCtl.transaction.account}" converter="#{accountConverter}" class="form-control">
                <f:selectItem noSelectionOption="true" itemLabel="no Type" />
                <f:selectItems value="#{accountCtl.accounts}" var="account" itemLabel="#{account.name}" itemValue="#{account}" />
            </h:selectOneMenu>
            <h:message for="account" infoClass="bg-info" warnClass="bg-warning" errorClass="bg-danger" />
        </div>

        <!-- BUTTON: SAVE -->
        <h:commandButton id="saveBtn" value="Speichern" action="#{transactionCtl.save()}"
            rendered="#{not empty transactionCtl.transaction}" styleClass="btn btn-primary btn-block">
            <f:ajax execute="@form" render="@form :globalMessages :transactionsForm" />
        </h:commandButton>

    </h:form>

所以,我希望有人能告诉我什么是错的。谢谢你的帮助。

0 个答案:

没有答案