gpt4 book ai didi

jsf - 如何评估 JSF 复合组件中的 MethodExpressions

转载 作者:行者123 更新时间:2023-12-01 16:15:44 26 4
gpt4 key购买 nike

我不确定在复合组件中处理方法表达式的“正确”方式。

我的复合 Material 使用带有操作方法的支持类。这些执行一些默认操作或委托(delegate)给复合用户作为属性传递的操作方法:

在使用页面中:

<my:component action="#{myBean.actionMethod}" />

合成的:
<cc:interface componentType="mycomponentType">
<cc:attribute name="action" method-signature="java.lang.String action()" required="false" />
</cc:interface>

<cc:implementation>
<h:commandButton value="submit" action="#{cc.componentAction}" />
</cc:implementation>

支持类:
@FacesComponent("mycomponentType")
public class UIMyComponent extends UINamingContainer {

public String action() {
String outcome = "";

ValueExpression ve = getValueExpression("action");
String expression = ve.getExpressionString();

FacesContext facesContext = FacesContext.getCurrentInstance();
Application application = facesContext.getApplication();
ELContext elContext = facesContext.getELContext();
ExpressionFactory expressionFactory = application .getExpressionFactory();

MethodExpression methodExpression = expressionFactory.createMethodExpression(elContext, expression, String.class, new Class[0]);

outcome = (String) methodExpression.invoke(elContext, new Object[0]);

if (outcome.equals("whatever")) {
// set another outcome
}


return outcome;

}

}

上面的代码按预期工作,但我发现它相当庞大,它创建了一个 ValueExpression 来从声明的“action”属性中检索方法表达式。

UIComponentBase 提供 getValueExpression("attributeName")但是 MethodExpressions 没有类似的东西。

所以我的问题是是否有更好的方法来评估 MethodExpressions在复合组件中声明为属性,而不是上面的代码。

谢谢

最佳答案

将其作为属性而不是值表达式获取。

所以,而不是

ValueExpression ve = getValueExpression("action");


MethodExpression me = (MethodExpression) getAttribute("action");

关于jsf - 如何评估 JSF 复合组件中的 MethodExpressions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8532697/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com