af:attributeで値を計算するために使用しますが、呼び出されたときにのみ計算されることがわかります。
視覚化中に消費される変数を使用して値を指定する必要があるため、f:attributeが参照するコンポーネントの生成中ではない値を要求された場合、値は正しくありません。
問題を正しく特定できれば幸いです。属性値の評価を強制するにはどうすればよいですか?
誰かが私に答えてくれてありがとう!
xhtmlは次のとおりです。
<rich:scrollableDataTable
value="#{myBean.getScrollData(frm,sez)}"
var="eachRow"
rows="20"
>
<rich:columns value="#{sez.getElements()}" var="info"
index="index" sortable="false"
>
<h:inputText id="txtf#{info.getId()}" value="#{eachRow.data[info]}"
valueChangeListener="#{myBean.handle}"
>
<f:attribute name="xxx" value="#{eachRow.getId()}"/>
</h:inputText>
</rich:columns>
</rich:scrollableDataTable>
myBeanjavaは次のとおりです。
public void handle(ValueChangeEvent e){
Object value = e.getNewValue();
if ((value==null || value.equals("")) && e.getOldValue()==null) return;
String xxx = e.getComponent().getAttributes().get("xxx").toString();
System.out.println("handle("+xxx+","+value+")");
}
ScrollDatajavaは次のとおりです。
private String id="";
public String getId(){ return id;}
idは、DBから読み取られたScrollDataのプロパティです。
xxx値は投稿中にのみ検査されるので、eachRowはテーブルの最後のレコードに配置されます...そしてそれは間違っています。
このメカニズムは、DataTableで使用されていない場合は問題なく機能し、ページの作成中にgetId()メソッドが呼び出されることがわかります(これは正しいです)。