У меня возникла проблема, когда управляемый bean-файл @ViewScoped ведет себя как управляемый элемент @RequestScoped просто потому, что я использую тег составной: insertChildren. другие сообщения по этому вопросу, и я знаю об ограничениях @ViewScoped managedBeans, но у меня нет явных привязок, и я не использую JSTL в своем составном компоненте.JSF 2 Компонентный компонент insertChildren tag @ViewScoped в @RequestScoped :(
Я предполагаю, что тег insertChildren привязан к the managedBean, но я надеюсь, что кто-то там может вывести меня из моего несчастья и показать мне обходной путь - я действительно не хочу начинать использовать фасоль @SessionScoped. :)
Вот мой упрощенный пример. Простой управляемый Bean:
@ManagedBean(name = "simpleMB")
@ViewScoped
public class SimpleManagedBean implements Serializable {
private static final long serialVersionUID = -1;
@NotNull
@Email
private String email;
public SimpleManagedBean() {
System.out.println("SimpleManagedBean");
}
@PostConstruct
public void postConstruct() {
System.out.println("Post construct");
}
public String submit() {
return null;
}
... setter and getter
}
Используя SimpleManagedBean выше с формой и составным компонентом (без insertChildren) ниже, все работает, как ожидалось. Я ввожу какой-то текст, нажимаю «Отправить» и отображается ошибка вместе с введенным текстом. На этом этапе я счастлив.
<h:form>
<foo:simpleNoChildren />
<h:commandButton id="submit"
value="Submit"
action="#{simpleMB.submit}" />
</h:form>
... and the composite component ....
<composite:interface />
<composite:implementation>
<h:panelGrid columns="3">
<h:outputText value="Email" />
<h:inputText id="email"
value="#{simpleMB.email}"
required="true" />
<h:message for="email" />
</h:panelGrid>
</composite:implementation>
Теперь, если я двигаю panelGrid и это компоненты из составного компонента и заменить с композитным: insertChildren тег, как показано ниже, когда я вхожу какой-нибудь текст и нажмите представить соответствующее сообщение об ошибке отображается , но поскольку метод @PostConstruct вызывается снова, текст, который я ввел, больше не отображается. :(
<h:form>
<foo:simple>
<h:panelGrid columns="3">
<h:outputText value="Email" />
<h:inputText id="email" value="#{simpleMB.email}" required="true" />
<h:message for="email" />
</h:panelGrid>
</foo:simple>
<h:commandButton id="submit" value="Submit" action="#{simpleMB.submit}" />
</h:form>
... and my complicated composite component :) ...
<composite:interface />
<composite:implementation>
<composite:insertChildren />
</composite:implementation>
Любые мысли или предложения
Заранее спасибо