gpt4 book ai didi

java - 从没有 JSTL 的 JSP 访问 FlowScope

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:41:36 25 4
gpt4 key购买 nike

我正在使用 Spring Web Flow(1.0.5 版)并且我有一个 JSP 页面,该页面对流进行 AJAX 调用并需要读入 XML 结果。该流成功地将对象设置到 FlowScope 中,然后调用 JSP 页面来呈现结果。在 JSP 页面中,我想测试该对象是否具有属性(例如,.firstName),如果有,则执行某些操作。我可以使用 JSTL 表达式语言(通过 ${userObj})访问 FlowScope 中的变量,但这只是让我吐出来。我已经尝试了以下方法来获取它并围绕它添加逻辑,并取得了不同程度的成功。

更新:剩下的问题是:如何获取 scriptlet (<% %>) 部分中的上下文和流范围?

<rootnode>

<!-- Attempt 1: c:if isn't being interpreted (though ${userObj.firstName} is),
it's just displaying the tags on the page. -->
<!-- Update, I didn't have the <%@ taglib directive for jstl/core.
Now I do, and they're being interpreted, but it says
"According to TLD or attribute directive in tag file,
attribute test does not accept any expressions"
How can the if/@test not accept expressions? Isn't that its whole purpose
in life? -->
<!-- Update 2, I also forgot the taglib for the rt language, which is separate,
I guess (jstl/core_rt). <c:if test now works properly. -->
<c:if test="${!empty(userObj.firstName)}">
<test>not empty</test>
</c:if>

<%
/* Attempt 2: This throws an error, can't resolve "context". How do I get the context? */
if (context.getFlowScope().userObj != null) {
out.write("not null");
} else {
out.write("not not null");
}
%>

<!-- Attempt 3: This works, I get the reference to the Object and it
spits out the correct firstName, gives me no control other than
spitting out the value. -->
<userReference>${userObj}</userReference>
<userReference_firstName>${userObj.firstName}</userReference_firstName>

</rootnode>

最佳答案

如果您安装了 JSTL 并以正确的方式声明了 taglib 并将 web.xml 声明为至少 Servlet 2.4,则尝试 1 应该可以工作。另请参阅问题:

要测试对象是否为空,您应该使用以下结构:

<c:if test="${not empty userObj.firstName}">

<c:if test="${userObj.firstName != null}">

强烈建议不要尝试 2。 Scriptlet 是一种糟糕的做法,应该始终用 JSTL 和 EL 等标签库替换(就像您在尝试 1 中所做的那样)。如果由于技术原因不可能,那么编码应该在真正的 Java 类中完成,(间接地)从 Servlet 开始。

尝试 3 是可行的,但我建议将 servlet 与 Javabean-to-XML 序列化程序一起使用,如 XStream反而。通过这种方式,您可以透明地将一组 Javabeans 提供给响应的输出流。

关于java - 从没有 JSTL 的 JSP 访问 FlowScope,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2593848/

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