javascript в jsf / icefaces - PullRequest
       14

javascript в jsf / icefaces

3 голосов
/ 25 марта 2011

У меня есть файл с расширением jspx, я пишу javascript как

function isNumber(inputId){

            var value = document.getElementById('mainForm:'+ inputId).value;
            var  s = value.length;

            while(s >= 0){
                var c = value.charAt(s);
                if(c > "9"){
                    alert("Value must be digit");
                    document.getElementById('mainForm:'+ inputId).value = "";
                    document.getElementById('mainForm:'+ inputId).focus();
                    return false;
                }
                s --;
            }
            return true;
        }

, которые работают отлично, но когда я проверяю, если условие, например, если (c> "9" || c <"0"), это выдает ошибку как </p>

com.sun.facelets.FaceletException: Error Parsing /WEB-INF/includes/templates/cc-classic-template.jspx: Error Traced[line: 386] The content of elements must consist of well-formed character data or markup.

После длительного наблюдения я обнаружил, что знак <(меньше) создаст проблему. JSF не поддерживает <знак? </p>

Ответы [ 3 ]

10 голосов
/ 25 марта 2011

Вложите свой Javascript в разделы CDATA:

<script language="javascript" type="text/javascript">
/* <![CDATA[ */

    function isNumber(inputId){

            var value = document.getElementById('mainForm:'+ inputId).value;
            var  s = value.length;

            while(s >= 0){
                var c = value.charAt(s);
                if(c > "9"){
                    alert("Value must be digit");
                    document.getElementById('mainForm:'+ inputId).value = "";
                    document.getElementById('mainForm:'+ inputId).focus();
                    return false;
                }
                s --;
            }
            return true;
        }

        //Code containing "<" also comes in this section

/* ]]> */
</script>
4 голосов
/ 25 марта 2011

Как объяснил Мэтт Хэнди, вы не можете использовать знак < или > в своем JSPX, так как это формат XML. У вас есть три решения относительно вашей проблемы:

  • Escape с помощью &lt; или &gt;.
  • Используйте <![CDATA[ ... ]]>, чтобы сохранить код JavaScript на своей странице.
  • Установите код JavaScript в отдельный файл .js и загрузите его на страницу JSPX.
0 голосов
/ 25 марта 2011

Помимо ответов на экранирование и CDATA:

Если вы хотите проверить, является ли значение числом, для этого есть встроенная функция javascript: isNaN

Вот пример:

if (isNaN(document.getElementById('mainForm:'+ inputId).value))
  {
    alert("Please enter digits");
    document.getElementById(obj).focus();
    document.getElementById(obj).select();
    return false;
  }
...