2012-04-02 2 views
2

Предположим, у меня есть JSF страницыКак передать переменную JSF в JQuery

<h:body>  
    <h:form id="formID" prependId="false">  

     <h:outputText id="randomID" value="#{randomNumber.random}"/>  
     <h:commandButton id="buttonID" 
         value="Random" 
         onclick="myArrayList(countries)" /> //just example 
    </h:form> 
</h:body> 

@ViewScoped 
public class RandomNumber { 

    private int totalCountries; 
    private String data = "Afghanistan, Albania, Zimbabwe"; 
    private List<String> countries; 

    public RandomNumber() { 

     countries = new ArrayList<String>(); 
     StringTokenizer st = new StringTokenizer(data, ","); 

     while(st.hasMoreTokens()) { 
      countries.add(st.nextToken().trim()); 
     } 
     totalCountries = countries.size(); 

    } //end of constructor 

} //end of class RandomNumber 

.js файл

function myArrayList(countries) { 

    ..... 

} 

Смотрите, когда пользователь нажимает на кнопку, то я хочу, чтобы вызвать функцию Jquery кого я передаю мой ArrayList. Можно ли передать текущую переменную JSF со значениями в javascript или jQuery?

Благодаря

EDIT ** _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ - *

<h:body> 
    <h:form id="formID" prependId="false"> 

     <h:outputText id="countries" value="#{countries.countries}" style="display:none"/> 
     <h:inputHidden id="hiddenCountries" value="#{countries.countries}" /> 

     <h:commandButton id="buttonID" 
         value="Random" 
         onclick="myArrayList()"/> 

    </h:form> 

</h:body> 

@ViewScoped 
public class Countries { 

    private int totalCountries; 
    private String data = "Afghanistan, Albania, Zimbabwe"; 
    private List<String> countries; 

    /** Creates a new instance of Countries */ 
    public Countries() { 

     countries = new ArrayList<String>(); 
     StringTokenizer st = new StringTokenizer(data, ","); 

     while(st.hasMoreTokens()) { 
      countries.add(st.nextToken().trim()); 
     } 
     totalCountries = countries.size(); 

    } //end of constructor 

    public List<String> getCountries() { 
     return countries; 
    } 

    public void setCountries(List<String> countries) { 
     this.countries = countries; 
    } 

} //end of class Countries 

function myArrayList() { 

    alert(jQuery('#countries').html()); 
    alert(jQuery('#hiddenCountries').val()) //when using h:inputHidden 

} //end of function myArrayList 

ответ

1

Вы можете сделать

<h:inputHidden id="someID" value="#{randomNumber.data}/> 

(не забудьте добавить геттер/сеттер к вашим данным в bean-компоненте)

изменить ваш OnClick изменения h:commandButton

onclick="myArrayList()" // or onclick="myArrayList(#{SomeELExpressioGoesHere})" 

ваша функция JS в

function myArrayList(inputParam) { 
    alert(jQuery('#someID').val()); 
    var yourJSString = jQuery('#someID').val(); 
    var myArray = yourJSString.split(','); //when string is Afghanistan,Albania,Zimbabwe (no spaces) 
    alert(myArray[inputParam]); 
} 

для того, чтобы передать вашу строку JS в массив просто использовать

var yourJSString = jQuery('#someID').val() 
var myArray = yourJSString.split(','); //when string is Afghanistan,Albania,Zimbabwe (no spaces) 

Вы могли бы быть необходимо изменить someID в другой селектор id, если вы не хотите установить prependId = ложь в вашей форме ... или просто использовать broaded селектор JQuery как

alert(('input[id$="someID"]').val()); 

EDIT

Посмотрите на моем примере, вы должны работать с переменной строк данных, а не страны, потому что вы должны передавать данные только как строку, а не как массив ... после того, как вы передадите переменную данных в js, вы можете манипулировать ею с помощью простой функции slpit js, чтобы вернуть ее в js ... вы получаете Conversion Ошибка установки значения [[Афганистан, Албания, Зимбабве]] за «нуль, потому что вы пытаетесь установить String в массив ...вероятно, добытчик стран конвертирован неявно массив Java в строку и при попытке отправить его обратно (строку в массив), вы получаете исключение

для того, чтобы установить от JS обратно в боб:

jQuery('#someID').val("Some new String goes here"); 

, тогда, когда вы отправите форму .. значение будет установлено на сервер

+0

, но это даст вам значение outputText.Not ArrayList (страны)? Я думаю, что я не могу сделать это таким образом, потому что мой ArrayList является кодом на стороне сервера, а jquery - клиентской стороной. Как я могу передать код сервера jQuery, просто вызвав функцию .... Я не знаю, прав я или нет? – Basit

+0

Извините за поздний ответ. Спасибо :) Да, вы правы, я получаю все значения, которые находятся в ArrayList. Я редактирую свой вопрос. Но я также получаю ошибку после того, как я нажму на поле предупреждения. ** Значение настройки ошибки конверсии '[Афганистан, Албания, Зимбабве]' для 'нулевого конвертера'. **. Почему я получаю это? Еще один вопрос. Вне области, но связанный с ней ... ОК, я передал значение переменной Java в jQuery. Что, если я хочу, чтобы мой ArrayList стал нулевым в JQuery. Как я хочу, я использую что-то подобное в jQuery. 'countries = null', и эта вещь отражается в моем Java-коде. Является ли это возможным ? – Basit

+0

изменить мой вопрос – Daniel

Смежные вопросы