0

Mojarra 2.1.23 と Primefaces 3.5 を使用しています。このコードを機能させようとしていますが、何らかの理由でリスナーを呼び出すことができません。

<h:form id="menu" >
    <p:growl id="messages" autoUpdate="true" showDetail="true" />
    <p:panelMenu>
        <p:submenu label="Ajax Menuitems">
            <p:menuitem value="#{MenuController.test}"
                actionListener="#{MenuController.save}" ajax="true" 
                update="messages" />
            <p:menuitem value="Update" actionListener="#{MenuController.save}"
                update="messages" />
        </p:submenu>
    </p:panelMenu>
</h:form>

MenuControllerSpring 3 によって管理されるセッション スコープの Bean であり、そのプロパティでさえ同じ xhtml に適切に表示されます (ボタンには「保存」というテキストが表示されます)。

クラスは次のMenuControllerとおりです。

public class MenuController() implements Serializable{

    public static Logger log;
    public String test="Save";

    public MenuController() {
        log = LoggerFactory.getLogger(this.getClass());
        log.debug("Hello MenuController.");
    }

    public void save(ActionEvent event) {  
        addMessage("Data saved");  
        log.debug(" saving");
    }

    public void addMessage(String summary) {  
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO,
            summary,  null);  
        FacesContext.getCurrentInstance().addMessage(null, message);  
    }
    //getters and setters...
}

私も facelets を使用しています。以下は Layout.xhtml です。

<?xml version="1.0" encoding="UTF-8"?>
<!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: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><ui:insert name="title" /></title>
 </h:head>
 <h:body>
<div id="layout">       
<table>
<tr>
    <td>
    <div id="menu">
        <ui:include src="menu.xhtml"/>
    </div>

    </td>
    <td>
    <div id="content">
        <ui:insert name="content">              
        </ui:insert>
    </div>
    </td>   
</tr>
<tr>
<td>
    <div id="footer">
        <p><a href="#">© Footer</a></p>
    </div>
</td>
</tr>           
</table>
</div>

メニュー エントリをクリックしても、メソッドが呼び出されません。

4

1 に答える 1

2

この問題は、フォームの ID を「menu」から「menuForm」に変更することで解決されました。ID「menu」のレイアウトの ID と混同しないようにします。

<h:form id="menuForm" >
   <p:growl id="messages" autoUpdate="true" showDetail="true" />
    <p:panelMenu>
     <p:submenu label="Ajax Menuitems">
        <p:menuitem value="#{MenuController.test}"
            actionListener="#{MenuController.save}" ajax="true" 
            update="messages" />
        <p:menuitem value="Update" actionListener="#{MenuController.save}"
            update="messages" />
    </p:submenu>
   </p:panelMenu>
</h:form>
于 2013-07-12T20:49:54.960 に答える