2013-07-06 3 views
2

У меня проблема с этими двумя commandButton: Join и Leave.commandButton неактивен после рендеринга ajax

Я хочу скрыть Присоединиться, если я нахожусь в отпуске и наоборот.

Когда я помещаю ajax в false, нет проблем (но вся страница обновляется, и я не считаю это оптимальным).

Но когда атрибут ajax соответствует истинному с определенным обновлением (комментарий cf в коде), рендеринг хорош, но новый значок кнопки становится неактивным. Если я нажму на него, ничего не произойдет (ну, похоже, триггер actionListener, но просмотр не обновляется, я должен вручную обновить, чтобы увидеть разницу)

Спасибо за чтение.

<h:form id="formWaitingList" rendered="#{connexion.connected}" > 
    <p:commandButton id="Join" 
        actionListener = "#{connexion.joinWaitingList()}" 
        rendered="#{!connexion.waiting}" 
        ajax="false" 
       <!-- ajax="true" 
        update="Join,Leave"--> 
        value="Join"/> 

    <p:commandButton id="Leave" 
        value="Leave" 
        ajax="false" 
       <!-- ajax="true" 
        udpate="Join,Leave"--> 
        rendered="#{connexion.waiting}" 
        actionListener ="#{connexion.leaveWaitingList()}" /> 
</h:form> 
+0

Вы должны использовать обновление = "@ форму" для этого случая, потому что 'buttons' с визуализацией = ложной Безразлично 't появляется в коде, создаваемом html, поэтому вы не можете обновлять их напрямую. – danRod

ответ

4

Кажется, что вы не совсем знакомы с HTML/JavaScript. Вы знаете, JSF - это в основном генератор кода HTML/JavaScript (/ CSS). Ajax обновление работает в основном как это в JavaScript:

  • После отправки запроса Аякса JSF с помощью XMLHttpRequest, получить ответ XML, который содержит все элементы, которые необходимо обновить вместе с их идентификаторами клиента.
  • Для каждого обновляемого элемента используйте document.getElementById(clientId), чтобы найти его в текущем дереве HTML DOM.
  • Замените этот элемент новым элементом, как указано в ответе XML ajax.

Однако, если компонент JSF не генерируется его HTML-представление из-за rendered="false", то нет ничего в DOM дереве HTML, который можно найти и заменить. Это полностью объясняет симптомы, которые вы «видите».

Вам в основном нужно обернуть условно визуализированные компоненты JSF в компоненте, представление HTML которого составляет , всегда, а затем ссылается на него вместо этого в обновлении ajax.

Например,

<h:form> 
    ... 

    <h:panelGroup id="buttons"> 
     <p:commandButton ... update="buttons" rendered="#{condition}" /> 
     <p:commandButton ... update="buttons" rendered="#{not condition}" /> 
    </h:panelGroup> 
</h:form> 

Смотрите также:

+0

Ох, отлично, отлично работает! Я видел одно из ваших сообщений о том, чтобы скреститься с панелью, но вместо того, чтобы сжимать только кнопки, я тоже обернул форму><. Спасибо вам ! –

+0

Добро пожаловать :) – BalusC

+0

@BalusC Привет, BalusC, у меня есть вопрос об этом, если вы не возражаете. Я уже играл с OP-кодом (новичок в ajax), и я сделал это ' Andy