2012-07-03 2 views
0

Я пытаюсь получить простой commandLink для работы. Вот фрагмент кода страницы:JSF 2.0 commandLink - действие не вызывается, javascript erro

<div class="item-single"> 
    <h:graphicImage value="image/screenshots/#{collectionListBean.collectionListTeaser[0].screenshot}" alt="Screenshot #{collectionListBean.collectionListTeaser[0].title}"/> 
    <div class="item-title"> 
     <h:form id="teaser0"> 
      <h:commandLink value="#{collectionListBean.collectionListTeaser[0].title}" action="#{collectionBean.showCollection(collectionListBean.collectionListTeaser[0].id)}" />  
     </h:form> 
    </div> 
    <div class="item-description"> 
     <p> 
      <h:outputText value="#{collectionListBean.collectionListTeaser[0].persons.get(0).person.getFullName()}" /> 
     </p> 
    </div> 
</div> 

Заголовок отображается правильно, так что поддержка боб и список доступен и доступен. CollectionBean также доступен и доступен. Список имеет фиксированный размер и используется внутри галереи javascript, поэтому я не использовал элементы ui: repeat или h/p: dataTable.

Я также проверил List of common problems

Действие не вызываются в бэк-бобе, я получаю следующий яваскрипт ошибки BalusC'S на консоли браузера:

Uncaught TypeError: Cannot read property 'teaser0:_idcl' of undefined 

Вот соответствующий код поддержки bean (collectionBean):

@Named("collectionBean") 
@Scope("access") 
@ViewController(viewIds = {ViewIds.EDIT_COLLECTION, ViewIds.SHOW_COLLECTION,  ViewIds.EDIT_COLLECTION, ViewIds.METADATA_COLLECTION_ADMIN,  ViewIds.EDIT_COLLECTION_EXISTING, ViewIds.COLLECTION_LIST, ViewIds.HOME}) 
public class CollectionBean extends CollectionBeanBase { 

. 
. 
. 
public String showCollection(long id) { 
    //Check if user is admin, if yes, allow to edit metadata 
    Authentication auth=SecurityContextHolder.getContext().getAuthentication(); 
    this.collection = collectionService.findById(id); 
    if (!(auth instanceof AnonymousAuthenticationToken)){ 
     role=auth.getAuthorities().iterator().next().getAuthority(); 
     if(role.equalsIgnoreCase("ROLE_ADMIN")) { 
      this.collection.setEdit_flag(true); 
      return ViewIds.EDIT_COLLECTION; 
     }   
    } 

    return ViewIds.SHOW_COLLECTION; 
} 

У кого-нибудь есть идея, в чем проблема? Любой намек высоко ценится! спасибо, ребята, заранее!

ответ

0

Я перегруппировал элемент, чтобы обернуть все div, пораженные галереей jQuery, и теперь это работает как шарм.

0

Это commandLink, то почему вы передаете значение в методе.

означает, что вы можете использовать

<f:param name="id" value="#{collectionListBean.collectionListTeaser[0].id}"/> 

вы можете легко получить, что значение в действии.

как

public String showCollection() { 

FacesContext fc = FacesContext.getCurrentInstance(); 

     Object id = fc.getExternalContext().getRequestParameterMap().get("id"); 

    System.out.println(id); 

    return ViewIds.SHOW_COLLECTION; 
    } 

я думаю, что это лучший способ сделать это.

+0

извините, но зачем мне использовать тег f: param, а затем получить его с помощью FacesContext? Гораздо проще (и чище) imho использовать функции JSF 2.0 и передать параметр с помощью EL. Также я не вижу, как это ответ на мой вопрос, поскольку он ничего не меняет ... однако спасибо за ваш ответ в любом случае – user871784

+0

Хорошо. я понимаю. Пожалуйста, измените аргумент метода long на Long. – KSHiTiJ

+0

работает со мной, как и в bean public void myMethod (Длинный идентификатор) { System.out.println ("id is:" + id); } – KSHiTiJ

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