Ajax JSF:动态加载的页面命令按钮不工作
我有一个包含PrimeFaces手风琴面板的页面,每个面板中都有一个PrimeFaces数据表。数据表下面是一个按钮“添加研究”,例如,单击此按钮时,我希望使用Ajax JSF:动态加载的页面命令按钮不工作,ajax,jsf,facelets,primefaces,dynamic,Ajax,Jsf,Facelets,Primefaces,Dynamic,我有一个包含PrimeFaces手风琴面板的页面,每个面板中都有一个PrimeFaces数据表。数据表下面是一个按钮“添加研究”,例如,单击此按钮时,我希望使用将页面动态加载到中。单击按钮时,我希望动态更改中的src值,以便将我的页面加载到中。现在的问题是: 我的托管bean被设置为@RequestScoped,当我单击按钮时,没有呈现任何内容。 如果我将我的托管bean设置为@SessionScoped,在第二次点击按钮后被填充,第一次点击没有任何作用 使用的技术:JSF2.0、PrimeFa
将页面动态加载到
中。单击按钮时,我希望动态更改
中的src值,以便将我的页面加载到
中。现在的问题是:
我的托管bean被设置为@RequestScoped
,当我单击按钮时,没有呈现任何内容。
如果我将我的托管bean设置为@SessionScoped
,
在第二次点击按钮后被填充,第一次点击没有任何作用
使用的技术:JSF2.0、PrimeFaces、Facelets
以下是一些代码片段:
主页
<h:panelGroup id="content" layout="block">
<ui:include src="#{studyBean.includePage}"/>
</h:panelGroup>
<div id="dashboard">
<h:form id="form" prependId="false">
<h:outputText value="Welkom #{loginBean.username}"/>
<p:accordionPanel autoHeight="true" effect="bounceslide">
<p:tab title="My studies">
<p:dataTable var="study" value="#{studyBean.studiesByUser}" id="studyTable"
emptyMessage="No studies found for given user" paginator="true" rows="10"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="5,10,15" rowSelectListener="#{studyBean.onRowSelect}"
selectionMode="single">
<p:column headerText="StartDate" sortBy="#{study.startDate}"
filterBy="#{study.startDate}"
filterMatchMode="contains" style="width: 100px;">
<h:outputText value="#{study.startDate}">
<f:convertDateTime pattern="dd/MM/yyyy" type="date" timeZone="CET"/>
</h:outputText>
</p:column>
<p:column headerText="EndDate" sortBy="#{study.endDate}"
filterBy="#{study.endDate}}"
filterMatchMode="contains" style="width: 100px;">
<h:outputText value="#{study.endDate}">
<f:convertDateTime pattern="dd/MM/yyyy" type="date" timeZone="CET"/>
</h:outputText>
</p:column>
<p:column headerText="School" sortBy="#{study.school}" filterBy="#{study.school}}"
filterMatchMode="contains" style="width: 100px;">
<h:outputText value="#{study.school}"/>
</p:column>
<p:column headerText="Specialization" sortBy="#{study.specialization}"
filterBy="#{study.specialization}}" filterMatchMode="contains"
style="width: 100px;">
<h:outputText value="#{study.specialization}"/>
</p:column>
<p:column headerText="Remarks" sortBy="#{study.remarks}"
filterBy="#{study.remarks}}"
filterMatchMode="contains" style="width: 100px;">
<h:outputText value="#{study.remarks}"/>
</p:column>
</p:dataTable>
<h:commandButton id="btnAddStudy" title="Add Study" value="Add Study">
<f:ajax render=":content" execute="form" listener="# {studyBean.navigate}"/>
<f:param name="action" value="add"/>
</h:commandButton>
</p:tab>
</p:accordionPanel>
</h:form>
提前谢谢
更新
现在我可以在我的
中动态加载页面,但我现在有另一个问题,当加载页面时,我想单击加载页面中的按钮,但绑定到的操作不会执行。因此,我没有进入我的支持bean,我已经尝试将bean的范围设置为@ViewScoped
,但没有成功
请帮助我,因为我正变得绝望。您的代码中似乎有一些拼写错误(
filterBy=“#{study.endDate}”
或listener=“#{studyBean.navigate}”
。你注意到了吗?@darkownage嗨,我面临着完全相同的问题,我想使用ui:include动态包含页面,当我的bean在@SessionScope中时,当我单击h:commandButton时,第一次单击时什么都没有发生,第二次单击时加载页面。另外,当我将bean放入@RequestScoped中时,当我单击h:commandButton链接n时未呈现任何内容。您似乎已经解决了该问题,请分享您是如何解决的。提前感谢。您的代码中似乎有一些拼写错误(filterBy=“{study.endDate}}”
或listener=“{studyBean.navigate}”
。你注意到了吗?@darkownage嗨,我面临着完全相同的问题,我想使用ui:include动态包含页面,当我的bean在@SessionScope中时,当我单击h:commandButton时,第一次单击时什么都没有发生,第二次单击时加载页面。另外,当我将bean放入@RequestScoped中时,当我单击h:commandButton链接n时未呈现任何内容。您似乎已经解决了该问题,请分享您是如何解决该问题的。提前感谢。
<h:body>
<ui:composition template="../template/template.xhtml">
<ui:define name="body">
<f:view contentType="text/html">
<ui:composition>
<h:form id="studyForm" prependId="false">
<p:messages />
<h:message for="startDate"/>
<h:message for="endDate"/>
<h:message for="school"/>
<h:message for="diploma1"/>
<h:message for="diploma2"/>
<h:message for="diploma3"/>
<h:message for="specialization1"/>
<h:message for="specialization2"/>
<h:message for="specialization3"/>
<h:message for="remarks1"/>
<h:message for="remarks2"/>
<h:message for="remarks3"/>
<h:outputText class="label" value="Start date: "/>
<h:inputText id="startDate" styleClass="inputtext validate[required,custom[date]]"
value="#{studyBean.startDate}">
<f:convertDateTime pattern="dd/MM/yyyy" timeZone="CET"/>
</h:inputText>
<h:outputText class="label" value="End date: "/>
<h:inputText id="endDate" styleClass="inputtext validate[required,custom[date]]"
value="#{studyBean.endDate}">
<f:convertDateTime pattern="dd/MM/yyyy" timeZone="CET"/>
</h:inputText>
<h:outputText class="label" value="school: "/>
<h:inputText id="school" styleClass="inputtext validate[required, maxSize[5]]"
value="#{studyBean.school}"/>
<h:outputText class="label" value="Specialization: "/>
<h:inputText id="specialization1" styleClass="inputtext validate[maxSize[50]]"
value="#{studyBean.specialization[0]}"/>
<h:inputText id="specialization2" styleClass="inputtext validate[maxSize[50]]"
value="#{studyBean.specialization[1]}"/>
<h:inputText id="specialization3" styleClass="inputtext validate[maxSize[50]]"
value="#{studyBean.specialization[2]}"/>
<h:outputText class="label" value="Diploma: "/>
<h:inputText id="diploma1" styleClass="inputtext validate[maxSize[50]]"
value="#{studyBean.diploma[0]}"/>
<h:inputText id="diploma2" styleClass="inputtext validate[maxSize[50]]"
value="#{studyBean.diploma[1]}"/>
<h:inputText id="diploma3" styleClass="inputtext validate[maxSize[50]]"
value="#{studyBean.diploma[2]}"/>
<h:outputText class="label" value="remarks: "/>
<h:inputText id="remarks1" styleClass="inputtext validate[maxSize[200]]"
value="#{studyBean.remarks[0]}"/>
<h:inputText id="remarks2" styleClass="inputtext validate[maxSize[200]]"
value="#{studyBean.remarks[1]}"/>
<h:inputText id="remarks3" styleClass="inputtext validate[maxSize[200]]"
value="#{studyBean.remarks[2]}"/>
<h:commandButton action="cancel" value="cancel" immediate="true"/>
<p:commandButton id="btnAddStudyDetail" value="add study" actionListener="#{studyBean.addStudy}"
update="studyTable" oncomplete="clearAddStudy()"/>
</h:form>
</ui:composition>
</f:view>
</ui:define>
</ui:composition>
</h:body>
@ManagedBean
@RequestScoped
public class StudyBean {
public String navigate() {
FacesContext facesContext = FacesContext.getCurrentInstance();
try {
action = (((HttpServletRequest) facesContext.getExternalContext().getRequest()).getParameter("action"));
if (action.equals("add")) {
//vull de velden
includePage = "studyDetail.xhtml";
}
facesContext = FacesContext.getCurrentInstance();
UIViewRoot root = facesContext.getViewRoot();
UIComponent form = root.findComponent("form");
dataTable = form.findComponent("studyTable");
System.out.println(dataTable);
System.out.println(root);
} catch (Exception e) {
facesContext.addMessage("form", new FacesMessage("You must select a study."));
}
return null;
}
}