2016-04-25 117 views
-2
<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个文本执行按钮的点击更新,虽然它会改变文本只含有字母“R”这样两个更新的其余的都是文本只是浪费。 但我想只更新其中有字母'r'的文字为'无效颜色'。我怎样才能做到这一点?动态/选择性地更新按钮

+0

Java代码无法编译。 – Unknown

+0

@未知雅可能是可能的,我只是试图解释这里的问题。 – nikhilsuri

回答

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

+0

但是我怎样才能知道“updatable_component_id”的值是否为动态生成的ID。 – nikhilsuri

+0

在'''中使用'inputText' id(mytext),你可以在bean中使用它。你也可以为'dataTable'设置属性'id',然后不会生成表的id。然后你可以写“table_id:input_text_id”。 – HAYMbl4

+0

但是这样所有的id(myText)组件都会被更新。所以这意味着所有五个文本将被更新,但我想只更新包含字母'r'的三种颜色。文本'黄色'和'蓝色'也将被分配id(myText),但我不想更新。 – nikhilsuri