H:selectManyChexkbox`s

时间:2013-04-20 20:37:39

标签: ajax jsf jsf-2 event-handling selectmanycheckbox

当用户选择/取消选择h:selectManyCheckbox中的某些内容时,我想触发一个事件更改侦听器,如果单独留下它,则不会发生任何事情。

我的xhtml:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html lang="en" 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:c="http://java.sun.com/jsp/jstl/core">

<h:head>
<link rel="stylesheet" type="text/css"
    href="/juritest/resources/css/style.css" />
<script type="text/javascript"
    src="/juritest/resources/js/jquery-1.8.2.js"></script>
<script type="text/javascript" src="/juritest/resources/js/menu.js"></script>
</h:head>

<h:body>
<ui:composition template="../../templates/gridsTemplate.xhtml">
    <ui:define name="content">
        ...
                <h:panelGroup style="text-align: left">
                    <hr />
                    <h:selectManyCheckbox
                        value="#{gridPopUpBean.oneQuestionUserAnswers}" 
                        layout="pageDirection">
                        <f:selectItem itemValue="a"
                            itemLabel="#{gridPopUpBean.currentQuestion.a}" />
                        <f:selectItem itemValue="b"
                            itemLabel="#{gridPopUpBean.currentQuestion.b}" />
                        <f:selectItem itemValue="c"
                            itemLabel="#{gridPopUpBean.currentQuestion.c}" />
                        <f:ajax event="click" listener="#{gridPopUpBean.changeListener()}"/>
                    </h:selectManyCheckbox>
                </h:panelGroup>
   ...

我收到错误消息“一个或多个资源的目标是'head',但视图中没有定义'head'组件。”我有&lt; H:头部&GT;不只是&lt;我知道这是一个可能的问题。

来自bean的片段:

public void changeListener(ValueChangeEvent e) {

    change = true;
}   

我试过没有&lt; f:ajax like

<h:selectManyCheckbox
                        value="#{gridPopUpBean.oneQuestionUserAnswers}" valueChangeListener="#{gridPopUpBean.changeListener()}" onclick="submit()"
                        layout="pageDirection">
                        <f:selectItem itemValue="a"
                            itemLabel="#{gridPopUpBean.currentQuestion.a}" />
                        <f:selectItem itemValue="b"
                            itemLabel="#{gridPopUpBean.currentQuestion.b}" />
                        <f:selectItem itemValue="c"
                            itemLabel="#{gridPopUpBean.currentQuestion.c}" />
                        <f:ajax event="click" listener="#{gridPopUpBean.changeListener()}"/>
                    </h:selectManyCheckbox>

但没有运气......

1 个答案:

答案 0 :(得分:2)

  

一个或多个资源的目标是“head”,但视图中没有定义“head”组件。“我有&lt; h:head&gt;而不仅仅是&lt; head&gt;,我读到了这可能是一个问题。

<ui:composition>以外的任何内容被忽略。如果您需要<h:head>,则需要进入主模板gridsTemplate.xhtml(或其任何父模板)。

此外,如果您没有为XHTML文件(如Dreamweaver)使用可视化编辑器,那么我强烈建议您不要将任何内容放在<ui:composition>otherwise you keep confusing yourself之外。

另见:


<f:ajax event="click" listener="#{gridPopUpBean.changeListener()}"/>

public void changeListener(ValueChangeEvent e) {

您将valueChangeListener<f:ajax listener>混淆。 ValueChangeEvent参数仅适用于valueChangeListener组件的UIInput属性。摆脱那个论点。

public void changeListener() {

另见:


对具体问题

无关,您正确使用了click(尽管您可以完全省略它),但您的问题标题提到了change,这确实是错误的复选框和单选按钮的事件。

另见: