1

ユーザーが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>
   ...

「1 つ以上のリソースに 'head' のターゲットがありますが、ビュー内で 'head' コンポーネントが定義されていません」というエラーが表示されます。< head> だけでなく < h:head> もあります。これは問題になる可能性があると読みました。

そして、Bean からのスニペット:

public void changeListener(ValueChangeEvent e) {

    change = true;
}   

< f:ajax のようなものなしで試しました

<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>

しかし、運が悪い...


HighCharts - グラフを表示する - 簡単な例 (markit API)

JavaScript を使ったプログラミングは初めてで、HighCharts チャートの実装に問題があります。私が使用している API はマークイット ( https://github.com/markitondemand/DataApis/blob/master/MarkitTimeseriesServiceSample.js ) で、このページhttp://dev.markitondemand.com/の途中に示されているグラフを生成します。

ここで、このフィドルに示されている js の代わりにその js スクリプトを追加する必要があると考えました ( http://jsfiddle.net/gh/get/jquery/1.7.2/highslide-software/highcharts.com/tree/master/ samples/highcharts/demo/line-basic/ ) ですが、機能していないようです。

実際に置きたい場所を割り当てていないためかもしれませんが、100%確信が持てません。

私のコードについては以下を参照してください。

<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>

<script src="http://www.google.com/jsapi"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js"></script>

<script src="http://code.highcharts.com/highcharts.js"></script>
<script src="http://code.highcharts.com/modules/exporting.js"></script>



<script>
    /**
    * Version 1.1, Jan 2012
    */
    var Markit = {};
    /**
    * Define the TimeseriesService.
    * First argument is symbol (string) for the quote. Examples: AAPL, MSFT, JNJ, GOOG.
    * Second argument is duration (int) for how many days of history to retrieve.
    */
    Markit.TimeseriesService = function(symbol,duration){
        this.symbol = symbol;
        this.duration = duration;
        this.PlotChart();
    };

    Markit.TimeseriesService.prototype.PlotChart = function(){

        //Make JSON request for timeseries data
        $.ajax({
            beforeSend:function(){
                $("#chartDemoContainer").text("Loading chart...");
            },
            data: {
                symbol: this.symbol,
                duration: this.duration
            },
            url: "http://dev.markitondemand.com/Api/Timeseries/jsonp",
            dataType: "jsonp",
            context: this,
            success: function(json){
             //Catch errors
    if (!json.Data || json.Message){
    console.error("Error: ", json.Message);
    return;
    }
                this.BuildDataAndChart(json);
            },
            error: function(){
                alert("Couldn't generate chart.");
            }
        });
    };

    Markit.TimeseriesService.prototype.BuildDataAndChart = function(json){
        var dateDS = json.Data.SeriesDates,
            closeDS = json.Data.Series.close.values,
            openDS = json.Data.Series.open.values,
            closeDSLen = closeDS.length,
            irregularIntervalDS = [];

        /**
    * Build array of arrays of date & price values
    * Market data is inherently irregular and HighCharts doesn't
    * really like irregularity (for axis intervals, anyway)
    */
        for (var i=0; i<closeDSLen;i++){
            var dat = new Date(dateDS[i]);
            var dateIn = Date.UTC(dat.getFullYear(), dat.getMonth(), dat.getDate());
            var val = closeDS[i];
            irregularIntervalDS.push([dateIn,val]); 
        }

        //set dataset and chart label
        this.oChartOptions.series[0].data = irregularIntervalDS;
        this.oChartOptions.title.text = "Price History of " + json.Data.Name + " (1 year)";

        //init chart
        new Highcharts.Chart(this.oChartOptions);
    };

    //Define the HighCharts options
    Markit.TimeseriesService.prototype.oChartOptions = {
    chart: {
    renderTo: 'chartDemoContainer'
    },
    title:{},
    subtitle: {
    text: 'Source: Thomson Reuters DataScope / Markit On Demand'
    },
    xAxis: {
    type: 'datetime'
    },
    yAxis: [{ // left y axis
    title: {
    text: null
    },
    labels: {
    align: 'left',
    x: 3,
    y: 16,
    formatter: function() {
    return Highcharts.numberFormat(this.value, 0);
    }
    },
    showFirstLabel: false
    }, { // right y axis
    linkedTo: 0,
    gridLineWidth: 0,
    opposite: true,
    title: {
    text: null
    },
    labels: {
    align: 'right',
    x: -3,
    y: 16,
    formatter: function() {
    return Highcharts.numberFormat(this.value, 0);
    }
    },
    showFirstLabel: false
    }],
    tooltip: {
    shared: true,
    crosshairs: true
    },
    plotOptions: {
    series: {
    marker: {
    lineWidth: 1
    }
    }
    },
    series: [{
    name: "Close price",
    lineWidth: 2,
    marker: {
    radius: 0
    }
    }]
    //,credits:{ enabled:false },
    };

    new Markit.TimeseriesService("GOOG", 365);

    /**
    * Need help? Visit the API documentation at:
    * http://dev.markitondemand.com
    */
</script>
</head>

<body>

<div id="container" style="min-width: 400px; height: 400px; margin: 0 auto"></div>

</body>
</html>

助けてくれてありがとう。

4

1 に答える 1

2

1 つまたは複数のリソースに 'head' のターゲットがありますが、ビュー内に 'head' コンポーネントが定義されていません。

外部の<ui:composition>ものはすべて無視されます。が必要な場合<h:head>は、マスター テンプレートgridsTemplate.xhtml(またはその親テンプレートのいずれか) に入れる必要があります。

さらに、XHTML ファイルにビジュアル エディタ (Dreamweaver など) を使用していない場合は、コンテンツを の外<ui:composition>に置くのをやめることを強くお勧めします

以下も参照してください。


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

public void changeListener(ValueChangeEvent e) {

と混同valueChangeListenerしてい<f:ajax listener>ます。引数は、コンポーネントの属性にValueChangeEventのみ適用されます。その議論を取り除きます。valueChangeListenerUIInput

public void changeListener() {

以下も参照してください。


具体的な問題とは関係なく、正しく使用しましclickたが(完全に省略しても問題ありません)、質問のタイトルに言及changeしており、それは実際にはチェックボックスとラジオボタンの間違ったイベントです。

以下も参照してください。

于 2013-04-20T21:31:59.697 に答える