2013-12-03 5 views
0

Я хочу создать динамические диаграммы с API Google, заполненными данными JSON из сервлета.jsf + js dynamic graph

На странице у меня есть selectManyCheckbox:

   <h:selectManyCheckbox id="xxx" value="#{panelB.foo}"> 
        <f:selectItems value="#{panelB.fooList}" var="s" 
            itemLabel="#{s}" 
            itemValue="#{s}"/> 
        <f:ajax event="click" execute="@this" render="@this :graphs"/> 
       </h:selectManyCheckbox> 

А внизу у меня есть DIV для сценария, и сам скрипт:

<h:form id="graphs"> 
     <div id="graph"> 
     </div> 
    </h:form> 

и сценарий часть, ответственная за получение данных в формате JSON от сервлета:

$.ajax({ 
     dataType: "json", 
     url: 'http://localhost:8080/graph/get/#{panelB.makeQuery()}/' 
     }; 

этот метод: panelB.makeQuery() просто берет fooList и делает строка для сервлета.

Когда я вхожу на страницу, этот метод вызывается, и он работает правильно, но когда я нажимаю на любой флажок, графики исчезают, а метод makeQuery() никогда не вызывается.

Я пробовал: -Изменение оказывают на SelectMany -Добавление OnEvent = "drawCahrt()"

ничего не работает. Пожалуйста помоги. Спасибо

+0

У вас есть только один график на этой странице или несколько? – Kuba

+0

один график, который изменяется при щелчке по галочке –

ответ

0

Как насчет использования атрибута данных HTML5.

<h:form id="graphs"> 
    <div id="graph" data-graph="#{myBean.selectedItem.graphData}"> 
    </div> 
</h:form> 

, то вы можете выбрать data-graph с jQuery, передать его в функцию рисования диаграммы и, наконец, relounch drawCahrt() с (при использовании Primefaces).

<h:selectManyCheckbox id="xxx" value="#{panelB.foo}"> 
    .... 
    <p:ajax oncomplete="drawChart();" process="@this" update=":graphs" /> 
</h:selectManyCheckbox> 

Убедитесь, что вы положили вы Аякс скриптлета в месте, которое в настоящее время rerendered от вашего, и вызовите DrawChart() после обновления HTML DOM на основе AJAX ответа.

+0

Спасибо за помощь, но я не использую Primfaces, и проект, над которым я работаю, не хочет, чтобы были простые. Извините, проблема с рендерингом не JSF-тега - это чистая ошибка - она ​​должна быть render = "graphs" :) –

+0

вам не нужно использовать Primfaces, я всегда использую его таким образом, '' будет делать также. – Kuba

+0

хорошо, я думаю, что сначала не понял ваши намерения. Вы показываете больше или меньше данных в своем графике в зависимости от того, сколько флажков вы укажете, не так ли? – Kuba