2013-08-24 3 views
0

Я хотел бы спросить, почему частичный рендеринг для шрифтов не работает. Запросы POST сохраняются отправленными, но они не перезаписываются.jsf ajax rendered не работает

<?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:h="http://java.sun.com/jsf/html" 
     xmlns:p="http://primefaces.org/ui"> 
    <h:head> 
     <title>Facelet Title</title> 
    </h:head> 
    <h:body> 
     <p:messages /> 
     <h:form> 
      <table style="width: 100%"> 
       <tr> 
        <td><p:outputLabel for="inp1" value="S1" /></td> 
        <td> 
         <p:inputText id="inp1" value="#{form.e.s1}"> 
          <p:ajax process="inp1" update="msg1" 
            event="keyup" /> 
         </p:inputText> 
         <p:watermark for="inp1" value="Wpisz S1" /> 
         <p:message for="inp1" id="msg1" /> 
        </td> 
       </tr> 
       <tr> 

        <td>Toolbox</td> 
        <td> 
         <p:selectBooleanCheckbox id="inpToolbox" value="#{form.toolbox}"> 
          <p:ajax process="inpToolbox" update="toolboxOptions" /> 
         </p:selectBooleanCheckbox><br /> 
         <p:panel id="toolboxOptions" rendered="#{form.toolbox}"> 
          Name: <p:inputText value="#{form.toolboxDescription}" /><br /> 
          Number: <p:inputText value="#{form.toolboxNr}" /><br /> 
         </p:panel> 
        </td> 

       </tr> 
      </table> 

      <p:commandButton action="#{form.save}" ajax="false" 
          value="Save" /> 

     </h:form> 
    </h:body> 
</html> 

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

ответ

2

Если вы хотите обновить некоторую часть представления, вам нужно указать идентификатор элемента, который фактически присутствует в DOM. Но панель, которую вы пытаетесь обновить, не всегда присутствует в DOM, только в том случае, если form.toolbox имеет значение true. Поэтому, когда он является ложным, он не может быть обновлен и поэтому он не будет добавлен в представление. Что вы можете сделать, чтобы решить эту проблему, - это обернуть панель внутри другого элемента и обновить этот элемент. Это будет работать, потому что элемент-оболочка всегда присутствует.

Так попробуйте следующее для части панели:

<h:panelGroup id="toolboxOptions"> 
    <p:panel id="toolboxOptionsPanel" rendered="#{form.toolbox}"> 
    .... 
    </p:panel> 
</h:panelGroup> 

Посмотрите на то, чтобы ответить на следующий вопрос для дальнейшего объяснения: JSF + PrimeFaces: `update` attribute does not update component

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