2015-03-04 9 views
0

Что я хотел бы сделать, это обновить orderList в каждый момент, когда флажок был установлен (не).Как обновить элемент с определенным ID

Мой компонент недоступен с ошибкой лиц. Компонент находится внутри form с id="form"

14:33:29,614 SEVERE [javax.enterprise.resource.webcontainer.jsf.application] (default task-9) Error Rendering View[/pages/view.xhtml]: javax.faces.FacesException: Cannot find component with expression ":form:orderList" referenced from "form:j_idt34:j_idt88:j_idt96:0:j_idt100". 

Я попробовал несколько решений, в том числе: :form, form, :orderList, orderList, form:panelGridChoice:orderList, :panelGridChoice:orderList, :form:panelGridChoice:orderList, :form:orderList

Это мой взгляд

<composite:implementation> 
    <h:outputStylesheet library="css" name="form.css" /> 
    <h:outputScript> 
     replaceMedia(); 
    </h:outputScript> 
    <ui:decorate template="answerDecorator.xhtml"> 
     <ui:define name="additionalForms"> 
      <h:outputText value="#{cc.attrs.question.additionalExplanation}" styleClass="text-normal" escape="false" /> 
     </ui:define> 
     <ui:define name="component"> 
     <p:panelGrid id="panelGridChoice" columns="1" cellpadding="0" styleClass="inline" columnClasses="" > 
      <p:dataTable var="answer" value="#{cc.attrs.question.possibleAnswers}"> 
       <p:column headerText="#{msg['survey.question.chooseAnswerList']}" styleClass="thirty-percent"> 
        <h:outputText value="#{answer.text}" /> 
       </p:column> 
       <p:column headerText="#{msg['survey.question.chooseAnswer']}" styleClass="ten2-percent" > 
        <p:selectBooleanCheckbox value="#{answer.checked}" > 
         <p:ajax event="change" process="@this" update=":form:orderList" listener="#{cc.attrs.question.setCheckedAnswers}" /> 
        </p:selectBooleanCheckbox> 
       </p:column> 
      </p:dataTable> 
      <p:orderList id="orderList" value="#{cc.attrs.question.checkedAnswers2Order}" var="answer" itemLabel="#{answer.text}" 
         converter="entityConverter" itemValue="#{answer}" controlsLocation="left" > 
       <f:facet name="caption">#{msg['survey.default.makeOrder']}</f:facet> 
      </p:orderList> 
     </p:panelGrid> 
     </ui:define> 
    </ui:decorate> 
</composite:implementation> 

Где определено answerDecorator.xhtml в

<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
      xmlns:h="http://java.sun.com/jsf/html" 
      xmlns:ui="http://java.sun.com/jsf/facelets"> 
<h:panelGrid columns="1" style="margin-bottom:10px" cellpadding="5" styleClass="borderless survey-panel-max"> 
    <h:outputText value="#{cc.attrs.question.questionText}" styleClass="text-header"/> 
    <h:panelGrid columns="2" style="margin-bottom:10px" cellpadding="5" styleClass="borderless top-alignment"> 
     <ui:insert name="additionalForms" /> 
    </h:panelGrid> 
</h:panelGrid> 
<ui:insert name="component" /> 

+0

Пожалуйста, разместите шаблон, который вы используете. Существуют ли какие-либо другие компоненты в части 'component'? – user1983983

+0

Нет, я опубликовал еще кое-что. –

+0

У вас есть панельная сетка с панелью idGridChoice. Используйте firebug (или какой-либо другой инструмент для веб-разработки для проверки html css), попробуйте найти идентификатор «panelGridChoice» на сгенерированном сайте html и проверить его идентификатор. Вы увидите, что вы пытаетесь обновить, и что такое реальный идентификатор. Используйте пример в Predrags answer, легко, потому что вам не нужно знать полный путь к идентификатору компонента. – jNick

ответ

1

Это может быть очень раздражает, поэтому в подобных ситуациях я обычно фокусируются компоненты от класса стиля. Попробуйте добавить styleClass="orderList" в <p:orderList> и наведите курсор на @(.orderList).