2011-09-08 2 views
2

еще раз сочетание PrimeFaces и GAE приводит меня в бешенство. Внутри p:dataTable Я хочу щелкнуть изображение, вызвать метод bean и установить параметр. Вызывается метод, но параметр не работает. Вот упрощенный пример (без стола):Google App Engine: f: setPropertyActionListener с p: ajax

<h:form id="f1"> 
    <h:outputText id="text" value="#{testBean.index}"/> 
    <h:graphicImage url="/images/cut.png"> 
    <p:ajax event="click" process="@this" update="text" 
      actionListener="#{testBean.test}" > 
     <f:setPropertyActionListener target="#{testBean.index}" value="5" /> 
    </p:ajax> 
    </h:graphicImage> 
</h:form> 

Мои TestBean выглядит следующим образом:

@javax.faces.bean.ManagedBean @ViewScoped 
public class TestBean implements Serializable{ 
    private int index; // getter/setter 

    @PostConstruct public void init() { 
    index = 0;log.log(Level.WARNING, "@PostConstruct");} 

    public void test(ActionEvent ae){ 
    log.log(Level.WARNING, "Index: "+index);} 
} 

В журналах я вижу один @PostConstruct и после нажатия на изображение всегда Index: 0

Обновление Проблема обновления стоимости может обсуждаться здесь JSF GAE: Value Update Problem in managed bean method

ответ

3

Я мало что знаю о GAE, поэтому не могу предположить, что это не мешает вашему коду. Я не обязательно считаю, что <f:setPropertyActionListener> является подходящим тегом для использования в теге <p:ajax>. Я не верю, что это признает.

Вот пример того, как я применил вызов ajax к объекту viewcoped bean с использованием <p:commandLink> и тега HTML <span>.

<p:commandLink actionListener="#{listUsers.toModify}" oncomplete="userEditDlg.show()" 
    update="addEditForm:editGrid addEditGrid:passwordChange addEditGrid:passwordGrid"> 
    <f:param name="userId" value="#{user.userId}" /> 
    <span class="ui-icon icoCogEdit" style="padding-right: 1.5em;" /> 
</p:commandLink> 
<p:commandLink actionListener="#{listUsers.toDelete}" oncomplete="userDelDlg.show()" 
    update="listUsersForm:dialogText"> 
    <f:param name="userId" value="#{user.userId}"/> 
    <span class="ui-icon icoDelete" /> 
</p:commandLink> 

Я просто установить класс CSS, чтобы быть статическим значок образ моего выбора, а затем щелкнув по нему будет вызывать диалог.

+4

Уточнение: ' поддерживается только для родительских компонентов, реализующих« ActionSource ». '' не делает. Однако интересная деталь заключается в том, что при использовании '' вместо '' исключение генерируется именно этим сообщением. Например, '' может быть заменен на требуемый ''. Функция ' будет работать одинаково хорошо, а не' 'внутри'

'. – BalusC

+0

@BalusC, я не знал об этом и узнал что-то новое, но если вы посмотрите внимательно, вы увидите, что ' на самом деле находится внутри тега' ', отступ ввинчивается. Это хорошая информация. –

+0

'' 'не может быть дочерним элементом другого' '. Он будет просто родителем самого «UIComponent». – BalusC

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