2010-06-14 36 views
1

List.xhtml:更新模型時Jsf驗證錯誤(顯示爲h:消息),爲什麼?

<h:selectOneMenu value="#{produtosController.selected.codigo}"> 
    <f:selectItems value="#{produtosController.itemsAvailableSelectOne}"/> 
</h:selectOneMenu> 
<h:commandButton action="#{produtosController.createByCodigos}" value="Buscar" /> 

控制器類方法:

public String createByCodigos(){ 
    items = new ListDataModel(ejbFacade.findByCodigos(current.getCodigo())); 
    updateCurrentItem(); 
    return "List"; 
} 

門面類方法:

public List<Produtos> findByCodigos(Integer codigo){ 
    Query q = em.createNamedQuery("Produtos.findByCodigo"); 
    q.setParameter("codigo", codigo); 
    return q.getResultList(); 
} 

Bean類查詢:

@NamedQuery(name = "Produtos.findByCodigo", query = "SELECT p FROM Produtos p WHERE p.codigo = :codigo") 

@Column(name = "codigo") 
private Integer codigo; 
+1

請粘貼* exact *消息。它是「價值無效」嗎? – BalusC 2010-06-14 17:55:29

+0

對不起j_idt12:j_idt28:ErrorValidación:Valor no es correcto in english j_idt12:j_idt28:驗證錯誤:錯誤的值或值錯誤。謝謝 – 2010-06-14 18:18:45

回答

-1

這裏是一個:

public String getAsString(FacesContext facesContext, UIComponent component, Object object) { 
     if (object == null) { 
      return null; 
     } 
     if (object instanceof Produtos) { 
      Produtos o = (Produtos) object; 
      return getStringKey(o.getId()); 
     } else { 
      throw new IllegalArgumentException("object " + object + " is of type " + object.getClass().getName() + "; expected type: "+ProdutosController.class.getName()); 
     } 

這裏是另一個:

public Object getAsObject(FacesContext facesContext, UIComponent component, String value) { 
     if (value == null || value.length() == 0) { 
      return null; 
     } 
     ProdutosController controller = (ProdutosController)facesContext.getApplication().getELResolver(). 
       getValue(facesContext.getELContext(), null, "produtosController"); 
     return controller.ejbFacade.find(getKey(value)); 
    } 

這是在velue丟失:的getValue(facesContext.getELContext()空, 「produtosController」 );?

+0

它如何解決你的問題? – ymajoros 2012-01-13 13:27:21

2

從評論,我知道它是Validation Error: Value not valid

這基本上意味着當前選擇的項目不是選擇項目列表中的一部分,因爲它在當前請求中。它也看起來像項目價值是一個非標準類型(Produtos也許?)。有此問題的三種可能的原因:

  1. equals()和表示該項目值不是或不正確實現的類型的hashCode()。要解決這個問題,讓IDE自動生成它或閱讀javadocs

  2. 已使用自定義轉換器,並且getAsObject()返回了錯誤的值。爲了解決這個問題,請確保它返回的值與通過getAsString()傳入的值完全相同

  3. 該bean是請求作用域,並且當您呈現表單時,選擇項列表與初始請求中的列表不同。要解決這個問題,您需要確保在後續請求中保留相同的列表。如果你已經使用JSF 2.0,那麼聲明bean @ViewScoped會解決它。如果您使用的是JSF 1.x,那麼您需要將該bean放入會話作用域中,或者在bean構造函數中執行列表加載。

+0

我發佈了後續問題我發現了什麼 – 2010-06-14 19:43:23

+0

BalusC我知道我問的太多,但是我的第一個網絡應用程序,我真的需要你的幫助(我有它的工作,但最後的變化毀了一切,我不知道爲什麼) – 2010-06-15 13:09:15

+1

對不起,非SSCCE格式的非英文和非直觀的代碼使得很難理解發生了什麼。我至少指出了可能的原因。您需要調試和調查它們。也許[這篇文章](http://balusc.blogspot.com/2007/09/objects-in-hselectonemenu.html)更有用。不要修改你的代碼,只需開始清理以獲得理解,然後進一步構建。 – BalusC 2010-06-15 13:28:26

0

感謝太多balusc,我有同樣的問題,我解決了它。

  1. 該bean是請求作用域,並且當您呈現表單時,選擇項列表與初始請求中的不同。要解決這個問題,您需要確保在後續請求中保留相同的列表。如果您已經使用JSF 2.0,那麼聲明bean @ViewScoped會解決它。
相關問題