Você não pode invocar métodos estáticos diretamente no EL. EL só invocará métodos de instância.
Quanto à tentativa de scriptlet com falha , você não pode misturar scriptlets e EL. Use um ou outro. Como os scriptlets são desencorajados ao longo de uma década, você deve se ater a uma solução somente EL.
Você tem basicamente 2 opções (assumindo que balance
e Calculate#getAmount()
são double
).
Basta envolvê-lo em um método de instância.
public double getAmount() {
return Calculate.getAmount(balance);
}
E use-o em seu lugar:
Amount: ${row.amount}
Ou declare Calculate#getAmount()
como uma função EL. Primeiro crie um /WEB-INF/functions.tld
arquivo:
<?xml version="1.0" encoding="UTF-8" ?>
<taglib
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1">
<display-name>Custom Functions</display-name>
<tlib-version>1.0</tlib-version>
<uri>http://example.com/functions</uri>
<function>
<name>calculateAmount</name>
<function-class>com.example.Calculate</function-class>
<function-signature>double getAmount(double)</function-signature>
</function>
</taglib>
E use-o da seguinte maneira:
<%@taglib uri="http://example.com/functions" prefix="f" %>
...
Amount: ${f:calculateAmount(row.balance)}">
Outra abordagem é usar Spring SpEL:
Se você pular o opcional
var="rowBalance"
,<s:eval>
o resultado da expressão será impresso para a saída.fonte
'the_string_argument'
- não há necessidade de dançar com o escape.Se sua classe Java for:
Então você pode chamar o método estático 'getStatusDesc' como abaixo na página JSP.
Use JSTL useBean para obter a classe no topo da página JSP:
Em seguida, chame a função onde você solicitou usando Expression Language:
fonte
Bean como StaticInterface também pode ser usado
e feijão
fonte
Settings.reset()
é uma chamada de método estático. Lukas propõe a criação de um ManagedBean tipo wrapper com um método não estático para cada método estático, que se deseja chamar de EL. É uma solução válida.EL 2.2 tem mecanismo embutido de métodos de chamada. Mais aqui: site da oracle . Mas não tem acesso a métodos estáticos. Embora você ainda possa chamá-lo por meio de referência de objeto. Mas eu uso outra solução, descrita neste artigo: Chamando um método estático de EL
fonte
<web-app> → <filter>
).Se você estiver usando struts2, você pode usar
e, em seguida, referenciar 'myVar' no atributo html ou tag html como
${myVar}
fonte
Com base na resposta de @Lukas, você pode usar esse bean e o método de chamada por reflexão:
xhtml, em um botão de comando, por exemplo:
fonte
SEVERE [javax.enterprise.resource.webcontainer.jsf.context] (http-localhost/127.0.0.1:8080-5) java.lang.IllegalArgumentException: wrong number of arguments
.Nesta solução, atribuímos valor (por meio da tag principal) a uma variável e, em seguida, buscamos o valor dessa variável no scriplet.
fonte
No Struts2 ou Webwork2, você pode usar isto:
Então referência
#tourLanguage
em seu jspfonte