单击按钮动态/选择性更新元素

时间:2016-04-25 13:59:22

标签: jsf primefaces

<p:dataTable value=”#{myBean.myList}” var=”item”>
        <h:outputText id=”mytext” value=”#{item.valueText}”/>
</p:dataTable>

//Item class

Class Item 
{
    String valueText;
    Item(String valueText) 
    {
           this.valueText = valueText;
    }
}

//myList has 5 elements. 

Item(“red”); 
Item(“orange”); 
Item(“yellow”); 
Item(“green”); 
Item(“blue”);`

//Button  
<p:commandButton value=’submit’ actionListener=”#{myBean.checkColor}” update=”myText”/>` // This will update all the five texts.

//MyBean Class 

Class MyBean
{ 
     List<Item> myList; 
     public void checkColor()
     { 
            Iterator itr = myList.iterator();      
             while(itr.hasNext())
             { 
                        Item item = itr.getNext(); 
                       if(item.getValueText().contains(‘r’))
                        { 
                               item.setValueText(“Invalid Color”); 
                        } 
             } 
      } 
}

上述代码将在点击按钮时对所有5个文本执行更新,但它只会更改包含字母&#39; r&#39;所以剩下两个更新只是浪费。 但我想只更新有字母&#39; r&#39;在他们的“无效的颜色”#。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

您可以尝试在方法myBean.checkColor中更新bean中的组件。为此,您需要使用以下结构:

RequestContext.getCurrentInstance().update("updatable_component_id");

在您的代码中,它应该如下所示:

class MyBean {
    private List<Item> myList;

    public void checkColor() {
        Iterator itr = myList.iterator();

        While(itr.hasNext()) {
            Item item = itr.getNext();
            If(item.getValueText().contains("r")) {
                Item.setValueText("Invalid Color");
                RequestContext.getCurrentInstance().update("updatable_component_id");
            }
        }
    }
}

about update from bean