这个问题已经在这里有一个答案:
- 验证错误:值无效 3个回答
我有这个selectOneMenu用于:
<h:selectOneMenu value="#{orderController.requestVO.requestSituation}">
<f:converter converterId="ComboConverter"/>
<f:selectItems value="#{orderController.requestSituation}" var="requestSituation"
itemLabel="#{requestSituation.description}" itemValue="#{requestSituation}" />
</h:selectOneMenu>
该requestSituation
是一个ArrayList
充满了RequestSituationVO
这是正确填充,产生此HTML:
<select name="j_idt14:j_idt20" size="1">
<option value="13">Pedido Recusado</option>
<option value="11">Pedido Validado</option>
<option value="12" selected="selected">Pedido Confirmado</option>
<option value="12" selected="selected">Pedido Faturado</option>
</select>
我有这样的Converter
和这里就是我很困惑,我读了很多,我知道它有什么做的,但不是它的工作原理。
这里是:
@FacesConverter(value = "ComboConverter", forClass = RequestSituationVO.class)
public class ComboConverter implements Converter
{
private static RequestSituationVO requestSituationVO = new RequestSituationVO();
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value)
{
requestSituationVO.setId(Integer.valueOf(value));
requestSituationVO = (RequestSituationVO) new RequestSituationBO().getRequestSituation(requestSituationVO).toArray()[0];
return (RequestSituationVO) requestSituationVO;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value)
{
requestSituationVO = (RequestSituationVO) value;
String teste = String.valueOf(requestSituationVO.getId());
return teste;
}
}
当我提出我的网页,我认为SelectOneMenu
将自动设置为值requestSituation
从方法requestVO
。 但是,当我提出,我得到一个消息Value not valid
引用到我的SelectOneMenu
。
我需要的是设置在我所选择的值RequestSituationVO
所以我可以将它发送到业务方法。