我遇到了关于Tomcat 7的JSF 2.2,richfaces 4.3.2的问题。
我的网页已注明ViewScoped
。
我显示第一个表格。当我更改值并选择特定值时,我会在rich:panel
内通过ajax显示a4j:outputPanel
元素。
在此a4j:outputPanel
和rich:panel
组件中,我有一个执行表单的h:commandButton
。
如果字段为空(例如其他内容)
但是当我点击h:commandButton
时,视图会重新显示,并且会重新执行@postcontruct
方法。它应该只在视图范围内执行一次,我错了吗?
我不希望视图被反应化,我希望在我点击ajaxoutputPanel
内部时显示h:commandButton
。(我希望看到我旁边的h:messages
形式领域......不多问:-))
我读到了一些bug ...有没有办法改变这种行为,而不是传递给SessionScoped。
谢谢老兄。
<fieldset>
<h:form>
<h:panelGrid columns="3">
<h:outputText value ="Nom de l'étude : "></h:outputText>
<h:inputText id="study_name" value="#{analyse.study_name}" size="20" required="true" label="Nom de l'étude" />
<h:message for="study_name" style="color:red" />
<h:outputText value ="Analyse : "> </h:outputText>
<h:selectOneMenu id = "analyse" value="#{analyse.analyse_type}">
<f:selectItems value="#{analyse.analyse_type2Value}" />
<f:ajax execute="analyse" render=":ajaxOutputPanelAnalyse" />
</h:selectOneMenu>
</h:panelGrid>
</h:form>
</fieldset>
<a4j:outputPanel id="ajaxOutputPanelAnalyse" layout="block" ajaxRendered="true" >
<rich:panel id="richPanelAnalyse" rendered="#{analyse.analyse_type == 'NGS' and request.isUserInRole('ROLE_ADMIN_PROFILER_NGS')}" >
<h:form id ="NGS_form" >
<h:panelGrid columns="4">
<h:outputText value ="Run # :"> </h:outputText>
<h:inputText id="run_number" value="# {analyse.run_number}" size="20" required="true" label="Run" />
<h:message for="run_number" style="color:red" />
<h:outputText></h:outputText>
</h:panelGrid>
<h:commandButton value="Submit" action="#{analyse.addAnalyse}"/>
</h:form>
</rich:panel>
</a4j:outputPanel>
在豆...
@PostConstruct
public void setFlashParam(){
System.out.println("POST CONSTRUCT MON POTE");
FacesContext facesContext = FacesContext.getCurrentInstance();
return;
}
public String addAnalyse(){
System.out.println("Kikou");
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(" - Ajout de l'analyse ?"+" pour le patient ?"+" dans l'étude "+ study_name +" -"));
return "pretty:home";
}
答案 0 :(得分:1)
感谢BalusC的这篇文章(一如既往)http://balusc.blogspot.fr/2011/09/communication-in-jsf-20.html#AjaxRenderingOfContentWhichContainsAnotherForm
编辑:但是当你尝试添加一个rich:fileupload时,它不再有效:h:inputFile ...当你点击按钮时,它会在新的textarea中显示奇怪的html代码。 ......这很奇怪......
<rich:fileUpload id="upload" fileUploadListener="#{analyse.test}" acceptedTypes="bam,pdf,png" ontyperejected="alert('Seulement les fichiers avec l'extension bam et pdf sont acceptés.');" maxFilesQuantity="3">
<a4j:ajax event="uploadcomplete" execute="@none" render="upload" />
</rich:fileUpload>