在 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>
myBean java是:
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+")");
}
ScrollData java 是:
private String id="";
public String getId(){ return id;}
id 是从 DB 读取的 ScrollData 的属性。
我看到 xxx 值仅在发布期间检查,因此 eachRow 位于表的最后一条记录上......这是错误的。
在 DataTable 中不使用此机制时可以正常工作,并且我看到在创建页面期间调用了 getId() 方法(这是正确的)。