我有一个 xhtml 页面,我从托管 bean 中调用一个方法,但由于某种原因它似乎不起作用。我已经尝试了所有措施,更改为 p : command ,尝试了 ajax 调用。所有带有 hcommand 的页面都工作正常,请我在这里做错了什么
<?xml version="1.0" encoding="ISO-8859-1" ?>
<html 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.org/ui">
<f:metadata>
<f:event type="preRenderView" listener="#{hibernateController.getAllWebSites()}"/>
<f:event type="preRenderView" listener="#{hibernateController.getAllScores()}"/>
</f:metadata>
<h:head>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Mood Watch</title>
<h:outputStylesheet library="css" name="style.css" />
</h:head>
<h:body>
<div id="wrapper">
<div id="header">
<h2>Mood Watch</h2>
</div>
</div>
<form>
<p:outputLabel>Filter : </p:outputLabel>
<p:selectOneMenu id="whySelect1" value="#{hibernateController.siteFromMood}">
<f:selectItems value="#{hibernateController.mySites}" var="tempSites" itemLabel="#{tempSites.site}" itemValue="#{tempSites.moodSite}" />
</p:selectOneMenu>
<h:commandButton value="Filter" action="#{hibernateController.filterSites()}"/>
<h:commandButton value="View All" action="#{hibernateController.setSitMoodToNull()}"/>
</form>
<p:dataTable id="moodTable" var="moodValues" value="#{hibernateController.myFrontEndModels}">
<p:column headerText="Date">
<h:outputText value="#{moodValues.dateCreated}" />
</p:column>
<p:column headerText="Site">
<h:outputText value="#{moodValues.sitename}" />
</p:column>
<p:column headerText="Value">
<h:outputText value="#{moodValues.moodValue}" />
</p:column>
</p:dataTable>
</h:body>
public void setSitMoodToNull() {
siteFromMood = null;
System.out.println("This is setSiteFromMood to null :" + siteFromMood);
}
public void filterSites(){
System.out.println("Show me specifics");
}
最佳答案
试试这个:
您的form标签应该像这样<h:form>
因为您正在使用 h:commandButton
标签和您的 p:dataTable
标签应位于 h:form
内标签。在 EL 中写入方法名称,不带括号。
<?xml version="1.0" encoding="ISO-8859-1" ?>
<html 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.org/ui">
<f:metadata>
<f:event type="preRenderView" listener="#{hibernateController.getAllWebSites()}"/>
<f:event type="preRenderView" listener="#{hibernateController.getAllScores()}"/>
</f:metadata>
<h:head>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Mood Watch</title>
<h:outputStylesheet library="css" name="style.css" />
</h:head>
<h:body>
<div id="wrapper">
<div id="header">
<h2>Mood Watch</h2>
</div>
</div>
<h:form>
<p:outputLabel>Filter : </p:outputLabel>
<p:selectOneMenu id="whySelect1" value="#{hibernateController.siteFromMood}">
<f:selectItems value="#{hibernateController.mySites}" var="tempSites" itemLabel="#{tempSites.site}" itemValue="#{tempSites.moodSite}" />
</p:selectOneMenu>
<h:commandButton value="Filter" actionListener="#{hibernateController.filterSites}"/>
<h:commandButton value="View All" actionListener="#{hibernateController.setSitMoodToNull}"/>
<p:dataTable id="moodTable" var="moodValues" value="#{hibernateController.myFrontEndModels}">
<p:column headerText="Date">
<h:outputText value="#{moodValues.dateCreated}" />
</p:column>
<p:column headerText="Site">
<h:outputText value="#{moodValues.sitename}" />
</p:column>
<p:column headerText="Value">
<h:outputText value="#{moodValues.moodValue}" />
</p:column>
</p:dataTable>
</h:form>
</h:body>
关于Jsf h 命令按钮不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41959377/