2014-10-27 2 views
0

Я делаю проект в JSF, и я столкнулся с следующей проблемой.JSF/Primefaces span onClick автоматически вызывает Backing Bean

Когда я создаю следующий срок:

<ui:composition> 
    <div id="header" class="header"> 
     <p style="float: right; padding-right: 20px"> 
      Welcome, #{infoGet.username} <span class="glyphicon glyphicon-off" style="color: darkred; cursor: pointer;" onclick="#{Login.logout()}" /> 
     </p> 
    </div> 
</ui:composition> 

Он называет этот метод выхода из системы()

public void logout() { 
    FacesContext.getCurrentInstance().getExternalContext().invalidateSession(); 
    try { 
     FacesContext.getCurrentInstance().getExternalContext().redirect("Landing.xhtml"); 
    } catch(IOException e) { 
     e.printStackTrace(); 
    } 
} 

Однако на странице загрузки в OnClick внутри диапазона получает автоматически вызывается, если я:

public void logout() { 
    FacesContext.getCurrentInstance().getExternalContext().invalidateSession(); 
} 

И обновить страницу, сессия будет признана недействительной.

Есть ли способ вызвать метод «onClick» из диапазона? Мне нужно, чтобы это была метка, поэтому я могу правильно использовать элементы значка Bootstrap. Я знаю, что onClick обычно используется для Javascript, но было бы логично работать с JSF.

EDIT с раствора @ Луиджи-Мендоса

Изменена композиции:

<ui:composition> 
    <div id="header" class="header"> 
     <h:form style="float: right; padding-right: 20px"> 
      <h:commandLink action="#{Login.logout()}" styleClass="clearCommand"> 
       <span class="glyphicon glyphicon-off" style="color: darkred; cursor: pointer;" /> 
      </h:commandLink> 
     </h:form> 
     <p style="float: right; padding-right: 20px"> 
      Welcome, #{infoGet.username} 
     </p> 
    </div> 
</ui:composition> 

Сделано clearCommand:

#clearCommand { 
    cursor: pointer; 
} 

Левый вход в систему, как это было, и все работает прямо сейчас ,

ответ

1

Вы не должны вызывать язык выражений непосредственно в компоненте, отличном от JSF. То, что вы ищете, для <h:commandLink> вместо:

<h:form> 
    <h:commandLink action="#{Login.logout()}" styleClass="foo"> 
     <span style="...">logout</span> 
    </h:commandLink> 
</h:form> 

Где foo является CSS класс, где вы очистить форматирование по умолчанию для <a>. Затем вы можете использовать общий компонент HTML <span>, чтобы применить желаемый CSS к вашему тексту выхода.

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