【问题标题】:Jsf h commandbutton not workingJsf h 命令按钮不起作用
【发布时间】:2017-01-31 22:26:43
【问题描述】:

我有一个 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");

}

【问题讨论】:

标签: jsf primefaces


【解决方案1】:

试试这个:

您的 form 标签应该是这样的&lt;h:form&gt;,因为您使用的是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> 

【讨论】:

  • 相信我也试过了,我只是把它拿出来了,因为表格与表格无关,表格只是呈现数据,但我又试了一次,没有用
  • 您可以上传包含方法的完整支持 bean 代码吗??
  • 你没有 h:form 标签,你用
    替换 吗??
  • 非常感谢兄弟,我花了 2 个小时在这上面你能想象得到
  • 没问题,当你说“没有触发器”时,我真的很担心,但很高兴问题现在解决了。也请给答案投票。
猜你喜欢
  • 2012-09-02
  • 1970-01-01
  • 1970-01-01
  • 2013-04-30
  • 2013-02-06
  • 2011-01-12
  • 1970-01-01
  • 1970-01-01
  • 2011-07-09
相关资源
最近更新 更多