在使用我的自定义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>
所以,我希望有人能告诉我什么是错的。谢谢你的帮助。