2012-07-02 2 views
1

я использую JSF 2.0 с primefaces над JBoss 7. В некоторой части кода, у меня есть следующие:EL Выражение разбора целое до тех пор,

public void setItemValue(int value) { 
    this.value = value; 
} 

и в XHTML:

<p:commandButton ajax="true" value="Button" update="@form" 
action="#{bean.setItemValue(1)}"/> 

Проблема в том, что когда я нажимаю кнопку, я получаю javax.el.MethodNotFoundException, говоря, что setItemValue(java.lang.Long) не существует. Конечно, это не так, это должно быть значение int или Integer! Кто-нибудь видел эту проблему? есть ли альтернатива, кроме изменения моего метода, чтобы получить длинный? Благодаря!

EDIT: Просто скачан SNAPSHOT JBoss 7.2, и он отлично работает на нем. Похоже, его ошибка в JBoss 7.1.1 :(

+1

Попробуйте с f: setPropertyActionListener или # {bean.setItemValue ('1')} –

+0

Вторая попытка: 'Метод не найден: bean.setItemValue (java.lang.String)'.Но первая попытка сработала! Плохая часть заключается в том, что я все еще не могу передать «Integer» или «int» методу через jsf, но это хороший обходной путь :) – Montolide

+0

То же самое с Tomcat 7.0.26. Переход на Tomcat 7.0.28 исправил его для меня. Я действительно думаю, что литералы в EL действительно длинны, но мне нравится тот факт, что метод с Integer найден как совпадение в Tomcat 7.0.28. –

ответ

1

Выражение Метод типа действия

Строка действия()

Так используйте

public String setItemValue(Integer value) { 
    this.value = value; 
    return null; 
} 

Смотри также:

UPDATE Вам необходимо объявить версию сервлета как 3.0, чтобы в полной мере использовать EL 2.2, например, передать параметр. Для этого измените веб-приложение элемент в вашем web.xml к этому:

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" 
version="3.0"> 
+0

'return null;'? – Lion

+0

Если вы вернете нуль, то текущая страница будет перезагружена. Если у вас есть один, просто верните результат. – Ravi

+0

Спасибо за объяснение о сигнатуре метода действия! К сожалению, ошибка сохраняется :('Метод не найден: bean.setItemValue (java.lang.Long)' – Montolide

1

Не используйте get или set префикс любых методов компонента (его действительно плохая практика), action атрибут ожидает имя метода, а чем некоторые геттеры или сеттера

get и set используются только для получения и установки вашего боба переменных

Лучше заменить setItemValue с чем-то вроде assignItemValue

так:

<p:commandButton ajax="true" value="Button" update="@form" 
    action="#{bean.assignItemValue(1)}"/> 

где

public void assignItemValue(Long value) { //you could also try with int value... 
    //set the value to whenever you want too... 
} 
+0

та же ошибка: 'Метод не найден: bean.assignItemValue (java.lang.Long)' – Montolide

+1

Почему вы не изменяете аргумент метода Long? –

+0

Почему мне нужно принудительно использовать Long, поскольку по умолчанию для Java является Integer? – Montolide

2

Это выглядит немного странно, но вы можете вызвать метод intValue на Long объекта самости внутри EL 2,2

<p:commandButton ... action="#{bean.setItemValue((1).intValue())}"/> 
+0

Свойство ' intValue 'не найден по типу java.lang.Long – jmlv21104

+0

Вы добавили скобки в intValue? # {bean.myLongValue.intValue()}? – h2mch

0

Извинения для воскрешения этой древней нити. Если вы все еще используете Jboss 7.11 или сталкиваетесь с подобными проблемами и не хотите идти по маршруту EL (1) .intValue(), вы можете также перемещаться по нему в управляемом компоненте следующим образом: -

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