不是被动的JSF命令按钮。为什么?

不是被动的JSF命令按钮。为什么?,jsf,ejb-3.0,commandbutton,Jsf,Ejb 3.0,Commandbutton,我在客户端非常粗鲁,所以这可能是一个非常容易的问题,因为在JSF中谁比我更有基础(非常非常容易!:D),但我从几天开始就失去了理智。。我只是在业余时间很幸运。 但在那个(死)点我需要帮助。请帮帮我,否则我会整夜紧盯着键盘 我创建了一个包含两个表单的.xhtml页面,第二个表单指向一个会话Bean,该会话Bean初始化要创建的对象,并重定向到包含表单的页面,以便为其变量赋值 这是第一个.xhtml页面: <?xml version="1.0" encoding="UTF-8"?> &

我在客户端非常粗鲁,所以这可能是一个非常容易的问题,因为在JSF中谁比我更有基础(非常非常容易!:D),但我从几天开始就失去了理智。。我只是在业余时间很幸运。 但在那个(死)点我需要帮助。请帮帮我,否则我会整夜紧盯着键盘

我创建了一个包含两个表单的.xhtml页面,第二个表单指向一个会话Bean,该会话Bean初始化要创建的对象,并重定向到包含表单的页面,以便为其变量赋值

这是第一个.xhtml页面:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        <title>Modify A Cafeteria Element</title>        
    </h:head>
    <h:body>

        <f:view>
            <h:form>
                <h1><h:outputText value="Modify A Cafeteria Element"/></h1>
                <h:panelGrid columns="2">
                    <h:outputLabel value="Description:" for="description" />
                    <h:inputText id="description" value="#{cafeteriaElementBean.cafeteriaElement.description}" title="Description" />                   

                </h:panelGrid>

                <p:commandButton action="#{cafeteriaElementBean.saveOrEdit()}" value="Save" />
                <p:commandButton action="#{cafeteriaElementBean.edit()}" value="Edit" />
                <p:button outcome="cafeteriaElementList" value="Back" />
            </h:form>
        </f:view>
        <br/>
        #{cafeteriaElementBean.cafeteriaElement.description} periodicity list:
        <br/>

        <f:view>
            <h:form>
                <h1><h:outputText value="List"/></h1>
                <h:dataTable value="#{elementPeriodBean.filteredPerElement(cafeteriaElementBean.cafeteriaElement)}" var="item">
                    <h:column>
                        <f:facet name="header">
                            <h:outputText value="MaxAbsoluteForPeriod"/>
                        </f:facet>
                        <h:outputText value="#{item.maxAbsoluteForPeriod}"/>
                    </h:column>                   
                    <!-- code omissed for brevity-->
                </h:dataTable>

                <p:commandButton action="#{elementPeriodBean.create(cafeteriaElementBean.cafeteriaElement)}"  value="Add a new Periodicity"/> 

            </h:form>
        </f:view>



    </h:body>
</html> 

修改自助餐厅元素

#{cafeteraelementbean.cafeteraelement.description}周期性列表:
这是它的一个打印屏幕

点击“新周期性””按钮,驱动器将变为空:调试器不会检测到它,服务器终端不会写入任何内容。浏览器都不会重定向到第二页:(

会话Bean如下所示:(有一些削减)

package com.caffeeta.business;
导入com.cafeteria.facades.ElementPeriodFacade;
导入com.cafeteria.model.cafeteraelement;
导入java.util.List;
导入javax.inject.inject;
导入javax.inject.Named;
导入com.cafeteria.model.ElementPeriod;
导入java.io.Serializable;
导入javax.enterprise.context.SessionScoped;
@命名
@会议范围
公共类ElementPeriodBean实现了可序列化的CRUD{
私有元素周期元素周期;
@注入
ElementPeriodFacade ElementPeriodFacade;
公共列表getAll(){
返回elementPeriodFacade.findAll();
}
公共列表筛选器关联(自助餐厅元素自助餐厅元素){
return Element PeriodFacade.findForElement(自助餐厅元素);
}
公共字符串create(){
this.elementPeriod=新的elementPeriod();
返回“newElementPeriod”;
}
创建公共字符串(CaffeerElement CaffeerElement){
this.elementPeriod=新的elementPeriod();
this.elementPeriod.setCaffeerElement(caffeerElement);
返回“newElementPeriod”;
}
公共字符串修改(ElementPeriod ElementPeriod){
this.elementPeriod=elementPeriod;
返回“newElementPeriod”;
}
公共字符串saveOrEdit(){
elementPeriodFacade.create(elementPeriod);
返回“编辑自助元素”;
}
公共字符串编辑(){
elementPeriodFacade.edit(elementPeriod);
返回“编辑自助元素”;
}
删除公共字符串(ElementPeriod ElementPeriod){
elementPeriod facade.remove(elementPeriod);
返回“编辑自助元素”;
}
公共元素周期查找(长id){
返回elementPeriodFacade.find(id);
}
public ElementPeriod getElementPeriod(){
如果(this.elementPeriod==null)this.elementPeriod=new elementPeriod();
返回此.elementPeriod;
}  
公共无效setElementPeriod(ElementPeriod ElementPeriod){
this.elementPeriod=elementPeriod;
}
}
这是用于插入数据的表单页:

<?xml version="1.0" encoding="UTF-8"?>
<!--
To change this template, choose Tools | Templates
and open the template in the editor.
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        <title>Create periodicity for Cafeteria Element</title>        
    </h:head>
    <h:body>

        <f:view>
            <h:form>
                <h1><h:outputText value="Create/Edit Periodicity for #{cafeteriaElementBean.cafeteriaElement.description}"/></h1>

                <h:panelGrid columns="2">                 
                    <h:outputLabel value="Periodicity:" for="periodicity" />
                    <h:selectOneMenu id="periodicity" value="#{elementPeriodBean.elementPeriod.periodicity}" title="Periodicity" >
                        <!-- TODO: update below reference to list of available items-->
                        <f:selectItems value="#{periodicityBeam.all}"/>
                    </h:selectOneMenu>

                    <h:outputLabel value="MaxAbsoluteForPeriod:" for="maxAbsoluteForPeriod" />
                    <h:inputText id="maxAbsoluteForPeriod" value="#{elementPeriodBean.elementPeriod.maxAbsoluteForPeriod}" title="MaxAbsoluteForPeriod" />

                    <h:outputLabel value="MaxPercentageForPeriod:" for="maxPercentageForPeriod" />
                    <h:inputText id="maxPercentageForPeriod" value="#{elementPeriodBean.elementPeriod.maxPercentageForPeriod}" title="MaxPercentageForPeriod" />

                    <h:outputLabel value="FixValue:" for="fixValue" />
                    <h:inputText id="fixValue" value="#{elementPeriodBean.elementPeriod.fixValue}" title="FixValue" />   
                </h:panelGrid>

                <p:commandButton value="Save" action="#{elementPeriodBean.saveOrEdit()}"/>

                <!--p:button outcome="editCafeteriaElement" value="Back" /-->
            </h:form>
        </f:view>
    </h:body>
</html>

为自助餐厅元素创建周期
注意事项: -newElementPeriod从faces-config.xml的第一页正确指向这里 -无论是否直接从浏览器调用,newElemelPeriod.xhtml都可用 -其他按钮也可以工作:并非无处不在,因为有些按钮的行为与此按钮类似

请帮帮我!我快疯了

提前谢谢大家,,
Andrea

为什么要尝试从会话范围的bean中为create方法提供一个参数?尝试删除该参数并注入另一个会话范围的bean…

您可以在链接处进行检查,可能是commandButton的process属性

您收到的问题是什么,方法是否创建()已经被调用。这里有很多误解。我建议到此为止,试着掌握JSF和CDI的基础知识。另外,如果您使用JSF 2.0或JSF 2.1和CDI,我建议添加OmniFaces,以具有CDI的
@ViewScoped
注释功能,但是如果您使用JSF 2.2,那么您可以使用
@ViewScoped也适用于您的CDI bean。顺便说一句,为了检测JSF代码中的问题,在每个表单中添加一个
,这样转换之类的错误消息就会显示在那里,您(以及未来的读者)可以检测出这不起作用的原因。我通过复制/粘贴/调整OP的代码并使用这两个
进行了测试(与OP的当前代码相同)只是为了测试导航问题并发挥作用。在我的适应过程中,我只生成了必要的接口和类,如
ElementPeriodFacade
caffeetaelement
ElementPeriod
以及其他带有必要字段的类。看起来问题是在代码中的其他地方,为了简短的注释而省略了。您可以查找m更多原因:您是否也在浏览器的HTTP流量监视器和JS控制台中寻找线索?这更适合作为注释而不是注释
<?xml version="1.0" encoding="UTF-8"?>
<!--
To change this template, choose Tools | Templates
and open the template in the editor.
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        <title>Create periodicity for Cafeteria Element</title>        
    </h:head>
    <h:body>

        <f:view>
            <h:form>
                <h1><h:outputText value="Create/Edit Periodicity for #{cafeteriaElementBean.cafeteriaElement.description}"/></h1>

                <h:panelGrid columns="2">                 
                    <h:outputLabel value="Periodicity:" for="periodicity" />
                    <h:selectOneMenu id="periodicity" value="#{elementPeriodBean.elementPeriod.periodicity}" title="Periodicity" >
                        <!-- TODO: update below reference to list of available items-->
                        <f:selectItems value="#{periodicityBeam.all}"/>
                    </h:selectOneMenu>

                    <h:outputLabel value="MaxAbsoluteForPeriod:" for="maxAbsoluteForPeriod" />
                    <h:inputText id="maxAbsoluteForPeriod" value="#{elementPeriodBean.elementPeriod.maxAbsoluteForPeriod}" title="MaxAbsoluteForPeriod" />

                    <h:outputLabel value="MaxPercentageForPeriod:" for="maxPercentageForPeriod" />
                    <h:inputText id="maxPercentageForPeriod" value="#{elementPeriodBean.elementPeriod.maxPercentageForPeriod}" title="MaxPercentageForPeriod" />

                    <h:outputLabel value="FixValue:" for="fixValue" />
                    <h:inputText id="fixValue" value="#{elementPeriodBean.elementPeriod.fixValue}" title="FixValue" />   
                </h:panelGrid>

                <p:commandButton value="Save" action="#{elementPeriodBean.saveOrEdit()}"/>

                <!--p:button outcome="editCafeteriaElement" value="Back" /-->
            </h:form>
        </f:view>
    </h:body>
</html>