Jsf h:传递属性时的outputtext问题

Jsf h:传递属性时的outputtext问题,jsf,Jsf,我有一个搜索屏幕,在那里我搜索一个客户id,它使用一个Web服务并返回一个对象列表。我在datatable中显示结果。对于特定字段,我有一个方法,该方法根据迭代列表中每一行的键值提供值。键值是productID。我在名为output的bean中设置了它。在getCustomerValue方法中,我调用通过传递“productID”值来提供相关值的方法。我使用下面列出的代码来做同样的事情 <h:outputText id="customerID" binding="#{myBean.outp

我有一个搜索屏幕,在那里我搜索一个客户id,它使用一个Web服务并返回一个对象列表。我在datatable中显示结果。对于特定字段,我有一个方法,该方法根据迭代列表中每一行的键值提供值。键值是productID。我在名为output的bean中设置了它。在getCustomerValue方法中,我调用通过传递“productID”值来提供相关值的方法。我使用下面列出的代码来做同样的事情

<h:outputText id="customerID" binding="#{myBean.output}" value="#{customerBean.customervalue}">
<f:attribute name="myID" value="#{item2.customerService.productID}"/>
</h:outputText> 


加载页面时,该值将正确显示。我在同一个页面上有超链接,它基本上调用同一个Web服务并呈现同一个页面。但是这次除了上面列出的值之外,所有的值都被显示出来了。当我在“customervalue”方法中打印属性“item2.customerService.productID”的值时,它显示为null。我不确定为什么不传递此值。

您正在
中显示此值。
特定于组件本身,而不是其生成的HTML输出。
是在视图生成时评估的,而不是在视图渲染时评估的。在JSF构建视图时,
{item2}
不在范围内。它只在JSF呈现视图时出现在作用域中

您需要通过其他方式寻找解决方案。不清楚您使用的是什么JSF版本,但根据您的问题,您使用的是JSF 1.2(在未来的问题中,请明确提及您使用的JSF impl/version;在JSF 2.0中,许多事情可以以不同的方式完成,并且更加优雅)

我对你先前的问题的回答应该是对你目前问题的最好回答。无论如何,这显然不是一个选择。在这种情况下,至少有3种替代方法:

  • 将属性移动到
    #{item2}
    后面的类:

    <h:outputText value="#{item2.customervalue}">
    
    (我假设
    productID
    是一个
    Long

  • 将数据表的值绑定到
    DataModel

    private DataModel<Item2> items;
    

  • 再次感谢BalusC提供的快速/详细和有用的回答。我要试试这些。我感到困惑的一件事是,每次我点击链接时,这个值都会显示出来。我很惊讶你能把我所有的帖子都关联起来!!你帮助了这么多人-你怎么能跟踪这些:)我是个白痴-我在执行你之前的建议时做了一些错误的事情,认为我的容器不支持它:(我再次尝试了你以前的建议。这很有效-你的用户名链接到你可以找到以前问题的所有信息的地方。这是当有人没有告诉确切的JSF版本时我第一次做的:)抱歉,巴卢斯-我一定会提到下一个版本。非常感谢。
    private DataModel<Item2> items;
    
    <h:dataTable value="#{customerBean.items}" var="item2">
    
    public String getCustomervalue() {
        Item2 item2 = items.getRowData();
        // ...
    }