Значения JSF в области видимости не отображаются должным образом - PullRequest
1 голос
/ 28 июня 2011

У меня есть управляемый компонент под ViewScope. Внутри него есть переменная экземпляра.

Объект MetaData имеет список объектов inputItem.

@ManagedBean
@ViewScoped
public class ConBean implements Serializable {

     private MetaData metadata;

     @PostConstruct
     @SuppressWarnings("unchecked")
     public void init() throws IOException {
       this.metadata = new MetaData ();
     }

     public void proc(){
        List<InputItem> inputs= new ArrayList<InputItem>();
        inputs.add(***** code to populate the inputItem List);
        //after populating, inputs added to the metadata
        metadata.setInputs(inputs);

     }

//getters & setters
}

в моем JSF, список ввода заполняется внутри повтора пользовательского интерфейса.

<div id="inputplaceholder">
<ui:repeat value="#{conBean.metaData.inputs}" var="content">

</ui:repeat>
</div>

тег input div периодически обновляется с помощью опроса richfaces.

<a4j:poll id="poll" interval="12000" action="#{conBean.proc}"
                                  execute="@form" render="inputplaceholder"/>

Проблема, с которой я столкнулся, заключается в том, что для inputItems правильно задан объект metaData внутри метода proc (), когда представление визуализируется / частично обновляется, оно не выделяется в пользовательском интерфейсе. поэтому частичное обновление не дает никакого эффекта. Я пытался двигаться

this.metadata = new MetaData (); внутри метода proc, но не повезло.

любые идеи и помощь высоко ценится.

спасибо ...

1 Ответ

1 голос
/ 29 июня 2011

Частичный рендеринг действительно имел место?Это невозможно.А именно, отсутствует компонент JSF с идентификатором inputplaceholder.Вы присвоили его простому элементу HTML <div>.Замените его полноценным компонентом JSF:

<h:panelGroup layout="block" id="inputplaceholder">

Кроме того, поскольку вы использовали относительный идентификатор в атрибуте render, он будет сканировать только компоненты в том же родительском компоненте контейнера именования.<ui:repeat> является таким, однако компонент с желаемым идентификатором размещен вне it.Вы хотели бы использовать абсолютный идентификатор вместо этого.Предполагая, что он находится внутри <h:form> с фиксированным идентификатором:

<h:form id="myform">
    <h:panelGroup layout="block" id="inputplaceholder">
        ...

, тогда вы должны ссылаться на него в атрибуте render следующим образом

render=":myform:inputplaceholder"
...