Wracając to wątku głównego - generalnie nie musicie mnie przekonywać co do JSF, jest jaki jest, ale dla mnie jest czymś naturalnym do kompletu w JEE, więc z chęcią bym skorzystał.
Bug, ktory z łatwością można zreprodukować GF4.0(build 89):
<h:form>
<h:inputText value="#{bean.text}"/>
<h:commandButton value="Submit"/>
</h:form>
@ManagedBean
@RequestScoped
public class Bean implements Serializable {
private String text;
private void printUic() {
UIComponent uic = UIComponent.getCurrentComponent(FacesContext.getCurrentInstance());
System.out.println(uic.getClass());
}
public String getText() {
printUic();
return text;
}
public void setText(String text) {
printUic();
this.text = text;
}
}
W momencie wywołania gettera printUic printuje "class javax.faces.component.html.HtmlInputText" a setter "class javax.faces.component.html.HtmlBody".
Jak widać getter zwraca prawidłowo komponent, który go wywołuje, a setter zwraca parenta.
Wiedza o samym komponencie nie jest mi potrzebna, ale wołam na nim później getAttributes(), bo przechowuje tam dane kontekstowe, żeby wiedzieć, z którego pola w gridzie przychodzi dany set/get.
Używam GF4.0 standardowo była w nim mojarra 2.2.0 zrobiłem upgrade do 2.2.8-01 i nic sie nie zmieniło, testowałem też na ManagedBeans i CDI i jest tak samo. Problem jest opisywany w sieci już w 2010.
Może przetestuje jeszcze myFaces, jak na razie tej implementacji nie dotykałem.
Na w/w znalazłem workaround, więc OK, ale dziwi mnie dlaczego pomimo upływu 4ech lat, nie jest to nadal nafiksowane, i stąd się wzięło pytanie "czy ktoś używa JSF?" :)
Mam jeszcze jeden, dużo bardziej upierdliwy, problem, ale nie udało mi się go łatwo zreprodukować.