Как передать переменную JSF в jQuery - PullRequest
2 голосов
/ 02 апреля 2012

Предположим, у меня есть страница JSF

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

function myArrayList(countries) {

    .....

}

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

Спасибо

РЕДАКТИРОВАТЬ ** _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ - *

<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 Ответ

1 голос
/ 02 апреля 2012

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

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

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

изменить свой клик на 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 на другой селектор идентификатора, если вы не установите prependId = false в вашей форме ... или просто используете расширенный селектор jquery, такой как

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

EDIT

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

для установки из js обратно в bean:

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

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

...