Доступ к компоненту пользовательского элемента управления

У меня есть пользовательский элемент управления, который я буду вызывать ccViewTemplate с этим кодом:

<xp:repeat id="repeatData" rows="30"
    value="#{viewEntry}" var="veData"
    first="#{javascript:return (sessionScope.ssFirst != null)?sessionScope.ssFirst:0;}">
<xp:panel id="panelSelect">
<xp:callback facetName="viewBodyFacet" id="callback1"></xp:callback>
</xp:panel><!-- panelSelect -->
</xp:repeat>

представление базы данных (viewEntry) также определяется в ccViewTemplate и определяется на основе нескольких пользовательских свойств. Затем ccViewTemplate добавляется в другой пользовательский элемент управления с именем ccFinalView. Где вводятся пользовательские свойства, а содержимое дисплея вводится в viewBodyFacet. У меня есть доступ к veData, и все отлично работает на данный момент. В viewBodyFacet у меня есть ссылка, которая делает перенаправление, чтобы открыть документ, который также работает нормально. Однако в ссылке я хочу сначала получить свойство repeatData и сохранить его, чтобы он вернулся на правильную страницу повтора. Я использую этот код:

sessionScope.put ('ssFirst', GetComponent("repeatData") в первую очередь.);

Тем не менее, код не может найти getComponent("repeatData"), потому что он находится внутри ccViewTemplate и недоступен. Есть ли способ получить компонент repeatData из ccViewTemplate в то время как в ccFinalView, который содержит ccViewTemplate.

Я сделал getComponent ("ccViewTemplate"), и у меня есть дескриптор для пользовательского элемента управления, но getComponent ("ccViewTemplate"). GetComponent ("RepeatData"). Сначала не удается. Так есть ли способ извлечь значение из компонента "внутри" пользовательского элемента управления "извне" обычного элемента управления? посмотрел немного дальше и нашел это:

var rtn = getComponent ("ccViewTemplate"). getPropertyMap (). getProperty ("repeatData");

Он не генерирует ошибку, но ничего не возвращает, если я добавлю

var rtn = getComponent("ccViewTemplate").getPropertyMap().getProperty("repeatData").first;

Я получаю сообщение об ошибке getComponent() является нулевым

Надеюсь, это имеет смысл.

1 ответ

Насколько я понимаю, это идеальная работа для Java-бобов. Бин может даже сохранять значение по умолчанию.

public class Controller{

public String value;

public Controller(){
value = "default_value";
}

public String getValue(){return value;}
public void setValue(String value){this.value=value}

}

Таким образом, значение будет доступно, как только объект будет создан. нажатие кнопки затем устанавливает значение с помощью JavaScript,

ControllerBean.setValue("thisValue");

и вы можете прочитать значение

ControllerBean.getValue();

Этот вопрос показывает, как настроить bean-компонент: Как настроить управляемый bean-компонент для работы с документом Notes

Установив это, скажем, в viewScope, вы можете получить доступ к значению в любом месте, где вам нужно, независимо от того, находится оно в пользовательском элементе управления или на главной странице. Я очень рекомендую этот подход. Это просто означает возможность переосмысления вашей пользовательской структуры управления.

РЕДАКТИРОВАТЬ
Дополнительные идеи включают в себя наличие перечисления, которое поддерживает взгляды,

public enum Views{
VIEW_1("viewAlias", "urlParam")

private String vwAlias;
private String urlParam;
private Views(String alias, String param){
vwAlias = alias;
urlParam = param;
} 

// public getters
}

И тогда в вашем контроллере вы можете получить строку вида:

1. By seeing if a view param is included in the URL
2. If a cookie value is set
3. Take the hard coded default

Нажатие на действие изменения представления затем устанавливает значение cookie, изменяет параметр представления и перенаправляет.

Это все дополнительные идеи, но именно так я строю свои контроллеры представлений. Я буду делать урок по этому вопросу в ближайшее время.

Другие вопросы по тегам