Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.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
Jakarta ee a4j:未调用commandButton actionListener_Jakarta Ee_Richfaces - Fatal编程技术网

Jakarta ee a4j:未调用commandButton actionListener

Jakarta ee a4j:未调用commandButton actionListener,jakarta-ee,richfaces,Jakarta Ee,Richfaces,我有一个问题,服务器上没有调用上的actionListener。我已经生成了我真实代码的简化版本,并确认它演示了这个问题 有人能解释一下为什么没有调用actionListener吗 使用了3个文件:index.xhtml、MyManagedBean.java和MyEntity.java。以下是列表: index.xhtml 看起来你有嵌套的表单,去掉它们(即只保留一个) 顺便说一下,这看起来不像是一个简化的版本。是否会以任何方式影响问题?好的,我已经从场景中删除了组合以进一步简化,因为它不会影响

我有一个问题,服务器上没有调用
上的
actionListener
。我已经生成了我真实代码的简化版本,并确认它演示了这个问题

有人能解释一下为什么没有调用actionListener吗

使用了3个文件:index.xhtml、MyManagedBean.java和MyEntity.java。以下是列表:

index.xhtml
看起来你有嵌套的表单,去掉它们(即只保留一个)


顺便说一下,这看起来不像是一个简化的版本。
是否会以任何方式影响问题?

好的,我已经从场景中删除了组合以进一步简化,因为它不会影响行为。无论如何,我看不到表单嵌套在哪里。您是否假设组合将包含一个元素?它没有。popuppanel将自身附加到表单-因此按钮位于一个表单中,而该表单最终位于另一个表单中。好的,因此将popuppanel移动到其包含表单中确实解决了这个特殊问题。稍后我将编辑答案以保持一致性并接受。
<!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:h="http://java.sun.com/jsf/html" xmlns:a4j="http://richfaces.org/a4j"
    xmlns:rich="http://richfaces.org/rich" xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets">

<f:metadata>
    <f:event type="preRenderView" listener="#{myManagedBean.preRenderView}" />
</f:metadata>

<h:head>
    <title>A simple example</title>
</h:head>

<h:body>
    <rich:panel id="treePanel" header="Tree Panel">
        <h:form>
            <rich:tree var="entity" selectionType="ajax" selectionChangeListener="#{myManagedBean.onSelectionChanged}"
                render="treePanel,editPopup">
                <rich:treeModelAdaptor nodes="#{myManagedBean.someEntities}">
                    <rich:treeNode>
                        <h:outputText value="#{entity.someString}" />
                    </rich:treeNode>
                </rich:treeModelAdaptor>
            </rich:tree>
            <a4j:commandButton value="Rename..." onclick="#{rich:component('editPopup')}.show()"
                disabled="#{empty myManagedBean.selectedEntity}" />
        </h:form>
    </rich:panel>

    <rich:popupPanel id="editPopup" modal="true" autosized="true" resizeable="false"
        rendered="#{not empty myManagedBean.selectedEntity}" domElementAttachment="form">
        <f:facet name="header">
            <h:outputText value="Edit entity" />
        </f:facet>
        <h:form>
            <h:panelGrid columns="2">
                <h:outputLabel for="id" value="ID:" />
                <h:outputText id="id" value="${myManagedBean.selectedEntity.id}" />

                <h:outputLabel for="someString" value="Some string:" />
                <h:inputText id="someString" value="${myManagedBean.selectedEntity.someString}"
                    validatorMessage="Alphanumerics and spaces only.">
                    <f:validateRegex pattern="^[ 0-9A-Za-z]*$" />
                    <rich:validator />
                </h:inputText>
                <h:outputText />
                <rich:message for="someString" />
            </h:panelGrid>

            <a4j:commandButton actionListener="#{myManagedBean.updateSelectedEntity}" value="Update"
                oncomplete="#{rich:component('editPopup')}.hide()" render="treePanel" />
            <a4j:commandButton value="Cancel" onbegin="#{rich:component('editPopup')}.hide()" />
        </h:form>
    </rich:popupPanel>

</h:body>
</html>
package com.example.simple;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceContextType;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import javax.transaction.HeuristicMixedException;
import javax.transaction.HeuristicRollbackException;
import javax.transaction.NotSupportedException;
import javax.transaction.RollbackException;
import javax.transaction.SystemException;
import javax.transaction.UserTransaction;

import org.richfaces.component.UITree;
import org.richfaces.event.TreeSelectionChangeEvent;

@ManagedBean
@SessionScoped
public class MyManagedBean {

    private List<MyEntity> someEntities;

    private MyEntity selectedEntity = null;

    @PersistenceContext(type = PersistenceContextType.EXTENDED)
    private EntityManager em;

    @Resource
    UserTransaction utx;

    public void preRenderView() throws NotSupportedException, SystemException, SecurityException, IllegalStateException, RollbackException, HeuristicMixedException, HeuristicRollbackException {
        System.out.println( "preRenderView executed" );
        CriteriaBuilder cb = em.getCriteriaBuilder();
        CriteriaQuery<MyEntity> cq = cb.createQuery( MyEntity.class );
        Root<MyEntity> entity = cq.from( MyEntity.class );
        cq.select( entity );
        TypedQuery<MyEntity> q = em.createQuery( cq );
        someEntities = q.getResultList();

        if ( someEntities.isEmpty() ) {
            utx.begin();

            for ( int i = 0; i < 10; i++ ) {
                MyEntity newEntity = new MyEntity();
                newEntity.setSomeString( new StringBuilder( "Entity number " ).append( i ).toString() );
                em.persist( newEntity );
                someEntities.add( newEntity );
            }


            em.flush();
            utx.commit();
        }
    }

    public List<MyEntity> getSomeEntities() {
        return someEntities;
    }

    public void setSomeEntities( List<MyEntity> someEntities ) {
        this.someEntities = someEntities;
    }

    public MyEntity getSelectedEntity() {
        return selectedEntity;
    }

    public void setSelectedEntity( MyEntity selectedEntity ) {
        this.selectedEntity = selectedEntity;
    }

    public void onSelectionChanged( TreeSelectionChangeEvent event ) {
        List<Object> selection = new ArrayList<Object>( event.getNewSelection() );
        Object newSelectionKey = selection.get( 0 );
        UITree tree = (UITree) event.getSource();
        tree.setRowKey( newSelectionKey );
        setSelectedEntity( (MyEntity) tree.getRowData() );
    }

    public void updateSelectedEntity() throws NotSupportedException, SystemException, SecurityException, IllegalStateException, RollbackException, HeuristicMixedException, HeuristicRollbackException {
        utx.begin();
        em.merge( selectedEntity );
        em.flush();
        utx.commit();
    }
}
package com.example.simple;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class MyEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    private String someString;

    public Integer getId() {
        return id;
    }

    public void setId( Integer id ) {
        this.id = id;
    }

    public String getSomeString() {
        return someString;
    }

    public void setSomeString( String someString ) {
        this.someString = someString;
    }

    public String toString() {
        return someString;
    }
}