Java 煤层参数值的评价

Java 煤层参数值的评价,java,jsf,xhtml,attributes,seam,Java,Jsf,Xhtml,Attributes,Seam,在f:attribute中,我使用它来计算值,但我看到它只有在被调用时才被计算。 我需要使用可视化过程中消耗的变量来指定值,因此,如果它不是在f:属性引用的组件的生产过程中请求该值,则该值将不正确。 我希望正确地说明我的问题。如何强制计算属性值 如果有人回答我,谢谢! xhtml是: <rich:scrollableDataTable value="#{myBean.getScrollData(frm,sez)}" var="eachRow"

在f:attribute中,我使用它来计算值,但我看到它只有在被调用时才被计算。 我需要使用可视化过程中消耗的变量来指定值,因此,如果它不是在f:属性引用的组件的生产过程中请求该值,则该值将不正确。 我希望正确地说明我的问题。如何强制计算属性值

如果有人回答我,谢谢! 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>  
ScrollData 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+")");
}  
private String id="";
public String getId(){ return id;}  
id是从DB读取的ScrollData的属性

我看到xxx值仅在post期间检查,因此每个箭头都位于表的最后一条记录上。。。这是错误的。
当不在DataTable中使用时,该机制正常,我看到在创建页面时调用了getId方法,这是正确的。

这是预期的行为。是一个标记处理程序,它绑定到其单个父UIComponent,并在视图生成时进行处理。实际上,当基于XHTML标记解析JSF UI组件时,所有标记处理程序都会被评估和应用。在您的例子中,JSF组件树只包含一个组件,在视图渲染期间的每一行迭代中都会重用该组件。在视图渲染期间不会重新计算。因此,它仍然只保存在视图构建期间可用的值,即它包含null

无论如何,有几种方法可以实现功能需求,其中之一就是通过在值更改侦听器方法中编程地计算{eachRow}

public void handle(ValueChangeEvent e) {
    FacesContext context = FacesContext.getCurrentInstance();
    EachRow eachRow = context.getApplication().evaluateExpressionGet(context, "#{eachRow}", EachRow.class);
    // ...
}
另见: 同样的答案也适用于。
例如,在richtable中,每一行都有相同的控制器,但使用f:属性和每一行的键值,就可以正确识别处理程序中的行和数据以及其他内容。发布代码,详细说明您想要的内容,否则问题就不清楚了@ÓscarLópez我发布了代码。有什么想法吗?我相信rich的一个bug:ScrollDataTableThank@BalusC,但它不起作用。即使是您建议我返回最后一行而不是正确的行的方法。我尝试更改第三行的值,并调用了句柄;因此,我在debug eachRow值中看到,记录是最后一行的第四行,与我之前得到的完全相同。这将是一个RichFaces特定的问题。它适用于标准JSF数据表和PrimeFaces数据表。解决了!问题出在我使用的桌面模型上。它每次都位于数据的末尾。