2013-06-11 2 views
0

У меня есть составной элемент управления, как показано ниже;Функция Javascript не работает внутри составного элемента управления JSF

< HTML XMLNS = "http://www.w3.org/1999/xhtml" Xmlns: композиционные = "http://java.sun.com/jsf/composite" XMLNS: ч = «http://java.sun.com/jsf/html»>

<composite:interface> 
    <composite:attribute name="validatorId"/> 
    <composite:attribute name="message"/>   
</composite:interface> 

<composite:implementation> 
    <div>     
     <script type="text/javascript"> 
      function #{cc.attrs.validatorId}(){alert('why is it not working :(');}; 
     </script>         
     <div style="background-color: #F2DEDE;color: #b94a48;border-style: solid;border-color: #FAC3CB;border-width: 1.8px;font-family: Arial; 
       font-size: 12px;height:17px;vertical-align: middle;padding-left: 8px;padding-right: 8px;padding-top: 2px;display: none;" 
       id="#{cc.attrs.validatorId}"> 
      #{cc.attrs.message} 
      <img src="images/close-mini.png" style="cursor: pointer;padding-left: 5px;"/>    
     </div> 
    </div> 
</composite:implementation> </html> 

Этот элемент управления помещается в XHTML file.The яваскрипт и составные элементы управления оказывающего как ожидаемым образом. Но когда делается запрос на верстку следующее исключение происходит в Glassfish сервера:

java.lang.IllegalStateException: PWC3999: Не удается создать сеанс после того, как ответ был совершен.

В чем причина? Когда я удаляю исключение функции javascript, это не происходит.

+0

Можете ли вы включить весь стек? –

+1

Дубликат http://stackoverflow.com/search?q=Cannot+create+a+session+after+the+response+has+been+committed. То, что это произошло, когда вы добавили JS-код, - это чистое совпадение. Это также произойдет, если вы добавите столько же байтов обычного HTML или даже обычного текста. – BalusC

ответ

0

В следующем PreRender слушатель добавляется в составном элементе управления,

<f:event type="preRenderView" listener="#{fieldValidatorBean.PreRenderValidator}"/> 

и внутри функции слушателя,

public void PreRenderValidator(){ 
    FacesContext.getCurrentInstance().getExternalContext().getSession(true); 
    System.out.println("prerender being called"); 
} 

для повторного включения сессии. Спасибо @BalusC.

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