Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf Primefaces commandButton操作不';行不通_Jsf_Primefaces_Action_Commandbutton - Fatal编程技术网

Jsf Primefaces commandButton操作不';行不通

Jsf Primefaces commandButton操作不';行不通,jsf,primefaces,action,commandbutton,Jsf,Primefaces,Action,Commandbutton,我有一个Primefaces项目,其中包含以下xhtml文件: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/f

我有一个Primefaces项目,其中包含以下xhtml文件:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<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">
  <h:body>
     <ui:composition>       
        <h:form>
            <p:dataTable id="parameters" var="parameter" value="#{devTestController.parameters}" 
                editable="true" editMode="cell" widgetVar="parameterTable" 
                selection="#{devTestController.selectedRow}" selectionMode="single"
                rowKey="#{parameter}">  

                <f:facet name="header">
                    Parameters
                </f:facet>

                <p:column headerText="Parameter Name" style="width:30%">  
                    <p:cellEditor>  
                        <f:facet name="output"><h:outputText value="#{parameter.label}" /></f:facet>  
                        <f:facet name="input"><p:inputText id="parameterNameInput" value="#{parameter.label}" style="width:96%"/></f:facet>  
                    </p:cellEditor>  
                </p:column>  

                <p:column headerText="Parameter Value" style="width:60%">  
                    <p:cellEditor>  
                        <f:facet name="output"><h:outputText value="#{parameter.value}" /></f:facet>  
                        <f:facet name="input"><p:inputText value="#{parameter.value}" style="width:96%" label="Parameter Value"/></f:facet>
                    </p:cellEditor>  
                </p:column>

                <p:column headerText="Action" style="width:10%">
                    <p:commandButton value="Button in table" action="#{devTestController.doAction()}"/>  
                </p:column>
            </p:dataTable>  
            <p:commandButton value="Button outside table" action="#{devTestController.doAction()}"/>
        </h:form>
        <p:commandButton value="Button outside form" action="#{devTestController.doAction()}"/>
      </ui:composition>     
   </h:body>
</html>

参数
这里我有3个commandButton(p:commandButton)。一个在dataTable(迭代组件)内部,一个在dataTable外部,一个在h:form外部。
令人惊讶的是,唯一工作的是h:form之外的一个(最后一个)。我在网上搜索了5个小时,已经尝试了很多东西。我不明白为什么会这样。我读了很多关于类似问题的帖子,但没有一篇能解决我的问题。旁边有一个不错的。我读了所有的案例,找不到答案。首先,我怀疑我在彼此中嵌套了多个UIForm组件(案例2),我搜索了原始xhtml文件,其中包括上面的一个,但事实并非如此。除了这个,我的代码中没有其他h:form标记。毕竟,如果我完全删除了h:form标签,那么没有commandButton起作用,我还得到了“表单组件需要在其祖先中有一个UIForm。建议:将必要的组件包含在h:form中”警告。这里会出什么问题?

似乎您缺少了
的结束标记,因为@Omar points,您忘记了结束标记,即使我认为在发布问题时输入错误。从那以后,我自己进行了测试,它对我有效(PrimeFaces3.5,MojarraJSF2.1.26)。我做了这个,它是全功能的(表单内的按钮,而不是表单外的按钮)

@ManagedBean
@请求范围
公共类DevTestController{
公共类参数{
私有字符串标签;
私有字符串值;
公共参数(字符串标签、字符串值){
this.label=标签;
这个值=值;
}
公共字符串getLabel(){
退货标签;
}
公共字符串getValue(){
返回值;
}
公共void setLabel(字符串标签){
this.label=标签;
}
公共void设置值(字符串值){
这个值=值;
}
}
私有参数selectedRow;
私有列表参数=Arrays.asList(新参数(“param1”),
“p1”),新参数(“参数2”、“p2”);
公共DevTestController(){
}
公共无效行为(){
系统输出打印项次(“完成”);
}
公共列表getParameters(){
返回参数;
}
公共参数getSelectedRow(){
返回selectedRow;
}
公共无效设置selectedRow(参数selectedRow){
this.selectedRow=selectedRow;
}
}

参数

只是忘了把它放在邮局里。是的,我同意你的看法。这太老了,可能当时我没法发表评论。看来我的bean中没有“setSelectedRow”。现在一切都好了。非常感谢。不客气!注意,这里根本不需要
ui:composition
。此外,它使primefaces表的样式不正确。