Как мне вызвать/получить доступ к собственности управляемого компонента, когда имя компонента известно, но еще не построено?Повторное использование макета в нескольких бобах
Например:
<p:selectOneMenu value="#{eval.evaluateAsBean(bean).text}" >
<f:selectItems value="#{eval.evaluateAsBean(bean).values}" var="val"
itemLabel="#{val}" itemValue="#{val}" />
</p:selectOneMenu>
Если есть управляемый компонент называется testBean и на мой взгляд боб имеет значение "testBean"
, я хочу текстовые или значения от свойство testBean называться ,
EDIT1
Контекст
Объект состоит из списка свойств (значений). Одно свойство модифицируется с помощью специального редактора JSF, в зависимости от его типа.
Список редакторов определяется по типу объекта и отображается в форме с использованием тегов custom:include
. Этот настраиваемый тег используется для динамического включения редакторов <custom:include src="#{editor.component}">
. Компонент указывает на местоположение редактора JSF.
В моем примере некоторые редакторы (отображаемые в виде блоков выбора) будут использовать один и тот же символ (dynamicDropdown.xhtml). Каждый редактор имеет обработанный сеансом управляемый компонент. Я хочу повторно использовать один и тот же манекен с несколькими компонентами и передать имя компонента в dynamicDropdown.xhtml, используя фасоль param.
genericAccount.xhtml
<p:dataTable value="#{group.editors}" var="editor">
<p:column headerText="Key">
<h:outputText value="#{editor.name}" />
</p:column>
<p:column headerText="Value">
<h:panelGroup rendered="#{not editor.href}">
<h:outputText value="#{editor.component}" escape="false" />
</h:panelGroup>
<h:panelGroup rendered="#{editor.href}">
<custom:include src="#{editor.component}">
<ui:param name="bean" value="#{editor.bean}"/>
<custom:include>
</h:panelGroup>
</p:column>
</p:dataTable>
#{editor.component}
ссылается на файл dynamicDropdown.xhtml.
dynamicDropdown.xhtml
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.prime.com.tr/ui">
<p:selectOneMenu value="#{eval.evaluateAsBean(bean).text}" >
<f:selectItems value="#{eval.evaluateAsBean(bean).values}" var="val"
itemLabel="#{val}" itemValue="#{val}" />
</p:selectOneMenu>
</ui:composition>
eval
является управляемый компонент:
@ManagedBean(name = "eval")
@ApplicationScoped
public class ELEvaluator {
...
public Object evaluateAsBean(String el) {
FacesContext context = FacesContext.getCurrentInstance();
Object bean = context.getELContext()
.getELResolver().getValue(context.getELContext(), null, el);
return bean;
}
...
}
Что именно ваш конкретный вопрос/проблема? Вы, кажется, нашли решение уже, но я не вижу никаких вопросов/проблем, связанных с ним. – BalusC
Я получаю это исключение для: SEVERE: javax.el.PropertyNotFoundException: /WEB-INF/editors/dynamicDropdown.xhtml @ 13,73 value = "# {eval.evaluateAsBean ('profile'). text}": Свойство 'оцениватьAsBean' не найдено по типу com.acme.client.util.ELEvaluator –
Seitaridis
По-видимому, ваша среда не поддерживает EL 2.2. Какую версию контейнера вы используете? Какую версию сервлета объявляет ваш 'web.xml'? – BalusC