2012-03-21 3 views
2

Это мой XHTML код:Primefaces: RadioButton внутри Ui: повторить

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:ui="http://java.sun.com/jsf/facelets" 
     xmlns:f="http://java.sun.com/jsf/core" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:p="http://primefaces.org/ui"> 

    <h:head> 
    <title>Custom Radio Test</title> 
    </h:head> 

    <h:body> 

    <h:form id="mF" > 

     <p:selectOneRadio id="ITRadioGrp" value="#{testBean.radioSelectedValue}" layout="custom"> 
     <f:selectItems value="#{testBean.selectItems}" /> 
     </p:selectOneRadio> 

     <h:panelGrid columns="1"> 

     <ui:repeat id="vBGOF" value="#{testBean.groupOfFlights}" var="aFlight" varStatus="gofIndex"> 
      <p:radioButton for="ITRadioGrp" itemIndex="#{gofIndex.index}"/> #{aFlight} 
     </ui:repeat> 

     </h:panelGrid> 

    </h:form> 

    </h:body> 

</html> 

и это управляемый компонент:

package com.modern; 

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.RequestScoped; 
import javax.faces.model.SelectItem; 
import java.util.*; 

@ManagedBean 
@RequestScoped 
public class TestBean { 

    private String radioSelectedValue; 
    private String[] groupOfFlights; 
    private List selectItems; 

    public TestBean() { 
    groupOfFlights = new String[]{"FlightOne", "FlightTwo", "FlightThree"}; 
    } 

    public String[] getGroupOfFlights() { 
    return groupOfFlights; 
    } 

    public void setGroupOfFlights(String[] groupOfFlights) { 
    this.groupOfFlights = groupOfFlights; 
    } 

    public String getRadioSelectedValue() { 
    return radioSelectedValue; 
    } 

    public void setRadioSelectedValue(String radioSelectedValue) { 
    this.radioSelectedValue = radioSelectedValue; 
    } 

    // modified 
    public List getSelectItems() { 
    try { 
     if (selectItems == null || selectItems.isEmpty()) { 
     selectItems = new ArrayList(); 
     for (int g = 0; g < 3; g++) { 
      SelectItem option = new SelectItem(g, "flight" + (g + 1)); // value, label 
      selectItems.add(option); 
     } 
     } 
    } catch (Exception e) { 
     System.out.println(this.getClass().getName() + "] EXCEPTION " + e.toString()); 
    } 
    return selectItems; 
    } 

    public void setSelectItems(List selectItems) { 
    this.selectItems = selectItems; 
    } 
} 

Я всегда получаю ту же ошибку:

Невозможно найти компонент «mF: ITRadioGrp».

javax.faces.FacesException: Cannot find component 'mF:ITRadioGrp' in view. 
    at org.primefaces.component.radiobutton.RadioButtonRenderer.findSelectOneRadio(RadioButtonRenderer.java:144) 
    at org.primefaces.component.radiobutton.RadioButtonRenderer.encodeEnd(RadioButtonRenderer.java:35) 
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1763) 
    at com.sun.faces.facelets.component.RepeatRenderer.encodeChildren(RepeatRenderer.java:104) 
    at com.sun.faces.facelets.component.UIRepeat.process(UIRepeat.java:513) 
    at com.sun.faces.facelets.component.UIRepeat.encodeChildren(UIRepeat.java:974) 
    at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:304) 
    at com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:185) 
    at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:129) 
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1756) 
    at javax.faces.render.Renderer.encodeChildren(Renderer.java:168) 
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1756) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759) 
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:401) 
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131) 
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 

Я попытался изменить "для" атрибута в

<p:radioButton for="mF:ITRadioGrp" itemIndex="#{gofIndex.index}"/> #{aFlight} 

к (я проверил источник HTML удаляемый расположение = пользовательский»в р: selectOneRadio):

  1. мкФ: ITRadioGrp
  2. ITRadioGrp
  3. мкФ: ITRadioGrp: 0
  4. mF: ITRadioGrp: 1 ...

но всегда такая же ошибка !! где я ошибаюсь ??? Спасибо!

ответ

2

Используйте двоеточие в качестве префикса для того, чтобы обратиться к p:selectOneRadio начиная с корня вида:

<p:radioButton for=":mF:ITRadioGrp" itemIndex="#{gofIndex.index}"/> 

Если это не работает, смотрите в исходный HTML вашей страницы в браузере и найти правильный идентификатор клиента для p:selectOneRadio. Используйте этот идентификатор в свой атрибут for.

+0

большой! Великий!!!! большое спасибо!!!!! – afterbit

+0

Приятно слышать, что он работает! –

Смежные вопросы