Как обнулить проверку в EL, чтобы показать p: диалоги условно?

#jsf-2 #primefaces #el

#jsf-2 #простые #el

Вопрос:

У меня есть два <p:dailog> s, и, основываясь на условии свойства компонента, я хочу показать один из них. Я использовал следующий код

 onclick="#{empty groupBean.selectionGroup?dialog_empty.show():groupDialog.show()}"
 

Но он не работает, поскольку в нем говорится, что в выражении EL есть ошибка. Я не уверен, где ошибка. Правильно ли я это делаю?

Комментарии:

1. В этом конкретном случае ошибка оказывается достаточно очевидной, чтобы ее можно было обнаружить, просто взглянув на код, но в будущих вопросах об ошибках вам действительно следует скопировать все сообщение об ошибке, поскольку они обычно уже содержат ответ.

Ответ №1:

Вы обрабатываете код JavaScript как часть выражения EL. Это приведет только к синтаксической ошибке, потому что EL не может найти #{dialog_empty} nor #{groupDialog} в области видимости. Вы должны обрабатывать код JavaScript как строки, заключая их в кавычки, потому что в конечном итоге они должны быть записаны в HTML-ответ как есть:

 onclick="#{empty groupBean.selectionGroup ? 'dialog_empty.show()' : 'groupDialog.show()'}"
 

Комментарии:

1. спасибо БалусК. На самом деле в консоли не было ошибки. Приложение также работало нормально, кроме этой кнопки. Как я могу включить просмотр ошибок.

2. Вы сами сказали: «это говорит об ошибке в выражении EL»? Итак, есть «ошибка». Или это все, что вы получили?

3. это все, что я получил. Приложение работало нормально. Никаких исключений.

4. даже сейчас я вижу предупреждение, поэтому я его проигнорировал. Следующее предупреждение Description Resource Path Location Type This empty expression always evaluates to false. Only string, maps, arrays and collection have meaningful values for the empty operator group_detail.xhtml /mint_v1/WebContent/pages line 36 Facelet Validator

5. Ну, это, должно быть, был запрос ajax. Возможно, PrimeFaces подавляет это. Извините, я не использую PrimeFaces широко, я не могу подробно рассказать о его настройке. По крайней мере, ваша конкретная проблема теперь решена, верно? 🙂