2010-04-05 11 views
7

Ho a: inputFileUpload all'interno del form, nel html della pagina di visualizzazione l'id di questo componente è form: inputFile ma quando ho cercato di ottenere il componente da la radice di visualizzazione usando "form: inputFile" il ritorno è nullo, ma quando viene rimosso il "modulo:" il ritorno è il componente. Il componente non imposta il valore nel mio bean gestito, qualcuno ha questo problema?JSF non trova il componente nella vista root con il form id

EDIT:

<h:form id="form" enctype="multipart/form-data"> 
<t:inputFileUpload id="inputFile" size="40" value="#{managedBean.inputFile}"/> 
</h:form> 

Nella bean gestito:

private UploadedFile inputFile; 

con la ottiene e imposta forniti da Eclipse.

//This method scans the view root and returns the component with the id passed as parameter 
findComponentInRoot("form:inputFile"); 

Questo restituisce un valore nullo, ma quando io uso:

//This method scans the view root and returns the component with the id passed as parameter 
    findComponentInRoot("inputFile"); 

Il ritorno è il componente che sto cercando, ma quando uso la vista origine in Internet Explorer l'id di questo componente è "modulo: fileInput".

Non so se questo è correlato, ma il componente non imposta il valore nel mio bean gestito ed è strano il fatto che l'id del componente sia diverso dalla sorgente HTML. Sto usando JSF 1.2 Mojarra. Qualcun altro ha questo problema? O sai perché questo succede?

EDIT2: OK, sono molto stupido, in qualche modo la build non funzionava correttamente e quando la build è stata modificata in un'altra attività da Ant ha funzionato (ancora non so perché, ma semplicemente ha funzionato). Scusa per il disturbo.

+0

Non riesco a capire la tua domanda. Fornisci maggiori dettagli, preferibilmente codice e riformattalo. – Bozho

+0

Ho a: inputFileUpload all'interno di un modulo, il valore del componente non sta andando al mio bean gestito e quando ho cercato di ottenere il componente dalla radice di visualizzazione l'id del componente è diverso da quello che appare nell'origine HTML di la pagina. – kenzokujpn

+0

_how_ hai provato a farlo. Come ho detto, fornisci il codice! – Bozho

risposta

0

immagino findComponentInRoot è this (un dettaglio minore si dovrebbe aver condiviso).

In ogni caso, utilizzando findComponent(..) o getChildren(..) tornare sempre la id dei componenti come definito nella pagina. L'id HTML è qualcosa di diverso che consiste nello naming container:id.

+0

penso che quello che vuole veramente sapere è: perché jsf non sta configurando correttamente la proprietà uploadFile nel backing bean? – marcosbeirigo

+0

findComponentInRoot è esattamente il codice nel collegamento. Il mio problema in questo caso è che in alcune pagine ritorna con "formId: idComponent", e in altri ritorna con "idComponent", non sono sicuro se l'assenza di "form" nell'id è correlata, ma questo il componente non sta impostando il valore nel bean gestito. – kenzokujpn

2

È necessario utilizzare il componente binding o UIViewRoot#findComponent(). Ma questo non risolverà il problema del file caricato che non viene impostato. Per risolvere il problema, il primo passo è assicurarsi di aver definito e configurato lo ExtensionsFilter correttamente come per lo Tomahawk documentation, poiché è l'unico responsabile per analizzare la richiesta multipart/form-data e riportare tutti i parametri tra il file caricato nella mappa dei parametri della richiesta, in modo che il FacesServlet possa applicarli e aggiornare i valori del modello.

+0

Il mio collega l'ha già fatto, e nelle pagine ha funzionato sta funzionando bene, ho già le configurazioni ma nella mia pagina non funziona. – kenzokujpn

+0

Debug quali fasi sono state eseguite e se sono state gettate senza errori di convalida o di conversione (aggiungere '' alla pagina di notificare tutti). – BalusC

Problemi correlati