{"id":1875,"date":"2016-12-29T17:28:45","date_gmt":"2016-12-29T09:28:45","guid":{"rendered":"https:\/\/ai.zhousir.top\/?p=1875"},"modified":"2026-08-18T11:20:22","modified_gmt":"2026-08-18T03:20:22","slug":"ognl%e8%a1%a8%e8%be%be%e5%bc%8f","status":"publish","type":"post","link":"https:\/\/ai.zhousir.top\/?p=1875","title":{"rendered":"OGNL\u8868\u8fbe\u5f0f"},"content":{"rendered":"<section id=\"wenyan\" style=\"font-family: system-ui, 'Apple Color Emoji', 'Segoe UI', 'Segoe UI Symbol', 'Noto Sans', Roboto, sans-serif; line-height: 1.75; font-size: 16px; color: #000000; caret-color: #000000;\" data-provider=\"WenYan\">\n<p style=\"margin: 1em 0px;\"><strong style=\"color: #4870ac;\">OGNL<\/strong> \u5168\u79f0 Object-Graph Navigation Language\uff08\u5bf9\u8c61\u56fe\u5bfc\u822a\u8bed\u8a00\uff09\uff0c\u7528\u6765\u83b7\u53d6\u548c\u8bbe\u7f6e Java \u5bf9\u8c61\u5c5e\u6027\uff0c\u9700\u8981\u5199\u5728 <strong style=\"color: #4870ac;\">Struts2 \u6807\u7b7e<\/strong>\u91cc\u624d\u751f\u6548\u3002<\/p>\n<p style=\"margin: 1em 0px;\">\u5b83\u8bbf\u95ee\u7684\u5bf9\u8c61\u90fd\u653e\u5728 OGNL \u7684 <strong style=\"color: #4870ac;\">context<\/strong> \u91cc\u3002context \u662f Map\uff0c\u5b58\u4e00\u7ec4 key-value\uff0c\u5b9e\u9645\u5bf9\u5e94 <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; color: #4870ac; font-size: 0.9em; font-weight: normal; overflow-wrap: break-word; padding: 2px 4px; border-radius: 3px; margin: 2px; background-color: #f6f8fa; word-break: break-all;\">ActionContext<\/code>\u3002<\/p>\n<p style=\"margin: 1em 0px;\">Http \u8bf7\u6c42\u8fdb\u5230 Struts2 \u540e\uff0c\u6846\u67b6\u4f1a\u521b\u5efa ActionContext\u3001ValueStack \u548c\u5bf9\u5e94\u7684 Action\uff1bAction \u653e\u8fdb ValueStack\uff0cValueStack \u518d\u653e\u8fdb ActionContext\u3002\u5728 JSP \u91cc\u8bbf\u95ee context \u6570\u636e\u8981\u7528 <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; color: #4870ac; font-size: 0.9em; font-weight: normal; overflow-wrap: break-word; padding: 2px 4px; border-radius: 3px; margin: 2px; background-color: #f6f8fa; word-break: break-all;\">#<\/code>\uff1bValueStack \u662f\u6839\u5bf9\u8c61\uff0c\u8bbf\u95ee Action \u5c5e\u6027<strong style=\"color: #4870ac;\">\u4e0d\u7528\u52a0 #<\/strong>\u3002<\/p>\n<h2 style=\"padding: 1px 12.5px; color: #ffffff; margin: 1.2em 0px 1em; border-radius: 4px; display: inline-block; background-color: #4870ac; font-size: 1.3em;\">\u4e00\u3001OGNL \u4ecb\u7ecd<\/h2>\n<p style=\"margin: 1em 0px;\">\u8bb0\u4f4f\u8fd9\u6761\u94fe\u5c31\u591f\u7528\uff1a<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">ognl \u4e0a\u4e0b\u6587(context) &lt;=&gt; ActionContext &lt;- ValueStack &lt;- action \u5bf9\u8c61<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">\u503c\u6808 ValueStack \u91cc\u5e38\u89c1\u5bf9\u8c61\uff1aaction \u5b9e\u4f8b\u3001request\u3001session\u3001application\u3001response\u3001parameters \u6570\u7ec4\u3001attr \u7b49\u3002<\/p>\n<h2 style=\"padding: 1px 12.5px; color: #ffffff; margin: 1.2em 0px 1em; border-radius: 4px; display: inline-block; background-color: #4870ac; font-size: 1.3em;\">\u4e8c\u3001\u4e3b\u8981\u529f\u80fd<\/h2>\n<ul style=\"padding-left: 1rem; margin-left: 1rem; font-size: 0.9rem; list-style-type: disc;\">\n<li>\n<section>\u53d6\u6570\u636e\uff1a\u7528\u4e00\u6bb5\u5f88\u77ed\u7684\u8868\u8fbe\u5f0f\u53d6\u51fa\u5404\u79cd\u6570\u636e\u3002<\/section>\n<\/li>\n<li>\n<section>\u9644\u5e26\u4fbf\u6377\u80fd\u529b\uff1a\u65b9\u6cd5\u8c03\u7528\u3001\u9759\u6001\u65b9\u6cd5\u548c\u5c5e\u6027\u8c03\u7528\u3001\u6570\u503c\u8fd0\u7b97\u7b49\u3002<\/section>\n<\/li>\n<\/ul>\n<h2 style=\"padding: 1px 12.5px; color: #ffffff; margin: 1.2em 0px 1em; border-radius: 4px; display: inline-block; background-color: #4870ac; font-size: 1.3em;\">\u4e09\u3001\u5982\u4f55\u53d6\u6570\u636e<\/h2>\n<p style=\"margin: 1em 0px;\">OGNL \u4ece\u4e24\u4e2a\u5730\u65b9\u53d6\u6570\u636e\uff1a\u4e00\u662f Action \u5b9e\u4f8b\u5c5e\u6027\uff0c\u4e8c\u662f ValueStack\uff08\u503c\u6808\uff09\u3002\u4f1a\u5148\u4ece\u524d\u4e00\u4e2a\u53d6\uff0c\u53d6\u4e0d\u5230\u518d\u5230\u503c\u6808\u3002\u503c\u6808\u91cc\u5b58\u4e86 request\u3001session\u3001application\u3001response\u3001action \u5b9e\u4f8b\u3001parameters \u6570\u7ec4\u7b49\u3002<\/p>\n<h3 style=\"padding: 0px; color: #4870ac; margin: 1.2em 0px 1em; font-size: 1.3em;\">1. \u53d6 Action \u5b9e\u4f8b\u7684\u5c5e\u6027<\/h3>\n<p style=\"margin: 1em 0px;\">Action \u5c5e\u6027\u53ef\u4ee5\u76f4\u63a5\u5728 Struts2 \u6807\u7b7e\u91cc\u7528\u5c5e\u6027\u540d\u62ff\u5230\uff0c\u4e0d\u8981\u52a0 <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; color: #4870ac; font-size: 0.9em; font-weight: normal; overflow-wrap: break-word; padding: 2px 4px; border-radius: 3px; margin: 2px; background-color: #f6f8fa; word-break: break-all;\">#<\/code>\uff1a<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">&lt;s:property value=\"name\"\/&gt;\n&lt;s:property value=\"user.password\"\/&gt;<\/code><\/pre>\n<h3 style=\"padding: 0px; color: #4870ac; margin: 1.2em 0px 1em; font-size: 1.3em;\">2. \u53d6 ValueStack \u4e2d\u7684\u6570\u636e<\/h3>\n<p style=\"margin: 1em 0px;\">Struts2 \u63d0\u4f9b\u4e09\u79cd\u5199\u6cd5\uff1a<code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; color: #4870ac; font-size: 0.9em; font-weight: normal; overflow-wrap: break-word; padding: 2px 4px; border-radius: 3px; margin: 2px; background-color: #f6f8fa; word-break: break-all;\">#<\/code>\u3001<code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; color: #4870ac; font-size: 0.9em; font-weight: normal; overflow-wrap: break-word; padding: 2px 4px; border-radius: 3px; margin: 2px; background-color: #f6f8fa; word-break: break-all;\">%{}<\/code>\u3001<code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; color: #4870ac; font-size: 0.9em; font-weight: normal; overflow-wrap: break-word; padding: 2px 4px; border-radius: 3px; margin: 2px; background-color: #f6f8fa; word-break: break-all;\">${}<\/code>\u3002<code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; color: #4870ac; font-size: 0.9em; font-weight: normal; overflow-wrap: break-word; padding: 2px 4px; border-radius: 3px; margin: 2px; background-color: #f6f8fa; word-break: break-all;\">#<\/code> \u548c <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; color: #4870ac; font-size: 0.9em; font-weight: normal; overflow-wrap: break-word; padding: 2px 4px; border-radius: 3px; margin: 2px; background-color: #f6f8fa; word-break: break-all;\">%{}<\/code> \u8981\u653e\u5230 Struts2 \u6807\u7b7e\u91cc\u624d\u751f\u6548\uff1a<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">&lt;s:property value=\"#name\"\/&gt;\n&lt;s:property value=\"%{'hello struts2'}\"\/&gt;<\/code><\/pre>\n<p style=\"margin: 1em 0px;\"><code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; color: #4870ac; font-size: 0.9em; font-weight: normal; overflow-wrap: break-word; padding: 2px 4px; border-radius: 3px; margin: 2px; background-color: #f6f8fa; word-break: break-all;\">%<\/code> \u7684\u7528\u9014\u662f\uff1a\u6807\u7b7e\u5c5e\u6027\u88ab\u5f53\u6210\u5b57\u7b26\u4e32\u65f6\uff0c\u544a\u8bc9\u8fd0\u884c\u73af\u5883 <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; color: #4870ac; font-size: 0.9em; font-weight: normal; overflow-wrap: break-word; padding: 2px 4px; border-radius: 3px; margin: 2px; background-color: #f6f8fa; word-break: break-all;\">%{}<\/code> \u91cc\u662f OGNL \u8868\u8fbe\u5f0f\uff1a<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">&lt;s:url value=\"%{#myMap['key1']}\"\/&gt;<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">\u6700\u5e38\u7528\u7684\u8fd8\u662f <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; color: #4870ac; font-size: 0.9em; font-weight: normal; overflow-wrap: break-word; padding: 2px 4px; border-radius: 3px; margin: 2px; background-color: #f6f8fa; word-break: break-all;\">#<\/code>\uff1a<\/p>\n<table style=\"display: table; text-align: left; overflow: auto; border-collapse: collapse; margin: 1.4em auto; max-width: 100%; table-layout: fixed; overflow-wrap: break-word; word-break: break-all;\" width=\"800\">\n<thead>\n<tr>\n<th style=\"border: 1px solid #d9dfe4; padding: 9px 12px; font-size: 0.75em; line-height: 22px; vertical-align: top; text-align: center; font-weight: bold; color: #4870ac; background: #f7f7f7;\">\u5199\u6cd5<\/th>\n<th style=\"border: 1px solid #d9dfe4; padding: 9px 12px; font-size: 0.75em; line-height: 22px; vertical-align: top; text-align: center; font-weight: bold; color: #4870ac; background: #f7f7f7;\">\u542b\u4e49<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"border: 1px solid #d9dfe4; padding: 9px 12px; font-size: 0.75em; line-height: 22px; vertical-align: top;\">#session.name2 \/ #application.name3<\/td>\n<td style=\"border: 1px solid #d9dfe4; padding: 9px 12px; font-size: 0.75em; line-height: 22px; vertical-align: top;\">\u53d6 session\u3001application \u91cc\u7684 attribute\uff0c\u8981\u52a0\u524d\u7f00<\/td>\n<\/tr>\n<tr>\n<td style=\"border: 1px solid #d9dfe4; padding: 9px 12px; font-size: 0.75em; line-height: 22px; vertical-align: top;\">#name<\/td>\n<td style=\"border: 1px solid #d9dfe4; padding: 9px 12px; font-size: 0.75em; line-height: 22px; vertical-align: top;\">\u53d6 request \u8303\u56f4 attribute\uff0c\u4e0d\u8981\u52a0 request \u524d\u7f00\uff08\u52a0\u4e0a\u53cd\u800c\u53d6\u4e0d\u5230\uff09\uff1b\u9ed8\u8ba4\u53ea\u4ece request \u53d6\uff0c\u4e0d\u4f1a\u81ea\u52a8\u518d\u5230 session \/ application<\/td>\n<\/tr>\n<tr>\n<td style=\"border: 1px solid #d9dfe4; padding: 9px 12px; font-size: 0.75em; line-height: 22px; vertical-align: top;\">#parameters.name[0]<\/td>\n<td style=\"border: 1px solid #d9dfe4; padding: 9px 12px; font-size: 0.75em; line-height: 22px; vertical-align: top;\">\u53d6\u8bf7\u6c42\u53c2\u6570\uff0c\u5fc5\u987b\u52a0 parameters\uff0c\u7ed3\u679c\u662f\u6570\u7ec4\uff0c\u7b2c\u4e00\u9879\u52a0\u4e0b\u6807\uff1b\u76f8\u5f53\u4e8e request.getParameterValues(&#8220;name&#8221;)[0]<\/td>\n<\/tr>\n<tr>\n<td style=\"border: 1px solid #d9dfe4; padding: 9px 12px; font-size: 0.75em; line-height: 22px; vertical-align: top;\">#attr.name<\/td>\n<td style=\"border: 1px solid #d9dfe4; padding: 9px 12px; font-size: 0.75em; line-height: 22px; vertical-align: top;\">\u6309 request \u2192 session \u2192 application \u987a\u5e8f\u627e attribute\uff0c\u627e\u5230\u5c31\u505c<\/td>\n<\/tr>\n<tr>\n<td style=\"border: 1px solid #d9dfe4; padding: 9px 12px; font-size: 0.75em; line-height: 22px; vertical-align: top;\">#{&#8216;foo1&#8242;:&#8217;bar1&#8217;}<\/td>\n<td style=\"border: 1px solid #d9dfe4; padding: 9px 12px; font-size: 0.75em; line-height: 22px; vertical-align: top;\">\u7528 # \u6784\u9020 Map<\/td>\n<\/tr>\n<tr>\n<td style=\"border: 1px solid #d9dfe4; padding: 9px 12px; font-size: 0.75em; line-height: 22px; vertical-align: top;\">books.{?#this.price&lt;100}<\/td>\n<td style=\"border: 1px solid #d9dfe4; padding: 9px 12px; font-size: 0.75em; line-height: 22px; vertical-align: top;\">\u8fc7\u6ee4\u548c\u6295\u5f71\uff08projecting\uff09\u96c6\u5408<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">&lt;s:property value=\"#session.name2\"\/&gt;\n&lt;s:property value=\"#application.name3\"\/&gt;\n&lt;s:property value=\"#name\"\/&gt;\n&lt;s:property value=\"#parameters.name[0]\"\/&gt;\n&lt;s:property value=\"#attr.name\"\/&gt;\n\n&lt;s:set name=\"foobar\" value=\"#{'foo1':'bar1', 'foo2':'bar2'}\" \/&gt;\n&lt;s:property value=\"#foobar['foo1']\" \/&gt;\n&lt;s:radio list=\"#{'0':'\u7537','1':'\u5973'}\" name=\"sex\" label=\"\u6027\u522b\" value=\"%{user.sex}\"&gt;&lt;\/s:radio&gt;<\/code><\/pre>\n<p style=\"margin: 1em 0px;\"><code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; color: #4870ac; font-size: 0.9em; font-weight: normal; overflow-wrap: break-word; padding: 2px 4px; border-radius: 3px; margin: 2px; background-color: #f6f8fa; word-break: break-all;\">$<\/code> \u6709\u4e24\u79cd\u7528\u9014\uff1a\u56fd\u9645\u5316\u8d44\u6e90\u6587\u4ef6\u91cc\u5f15\u7528 OGNL\uff1b\u4ee5\u53ca\u5728 Struts2 \u914d\u7f6e\u6587\u4ef6\u91cc\u5f15\u7528\uff1a<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">&lt;action name=\"saveUser\" class=\"userAction\" method=\"save\"&gt;\n    &lt;result type=\"redirect\"&gt;listUser.action?msg=${msg}&lt;\/result&gt;\n&lt;\/action&gt;<\/code><\/pre>\n<h2 style=\"padding: 1px 12.5px; color: #ffffff; margin: 1.2em 0px 1em; border-radius: 4px; display: inline-block; background-color: #4870ac; font-size: 1.3em;\">\u56db\u3001\u4ee3\u7801\u5b9e\u4f8b<\/h2>\n<p style=\"margin: 1em 0px;\">Action \u4fa7\u5f80 context \/ \u503c\u6808\u91cc\u585e\u6570\u636e\uff1a<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">\/**\n * \u901a\u8fc7 ognl \u8868\u8fbe\u5f0f\u4ece ognl \u4e0a\u4e0b\u6587(context)\u83b7\u53d6\u503c\u663e\u793a\u5230 jsp \u9875\u9762\n * ognl \u8868\u8fbe\u5f0f\u53ea\u4f7f\u7528\u5728 struts2 \u6807\u7b7e\u4e2d\n * ognl \u4e0a\u4e0b\u6587(context) &lt;=&gt; ActionContext &lt;- ValueStack &lt;- action \u5bf9\u8c61\n *\n * \u503c\u6808 ValueStack \u5305\u542b\u5982\u4e0b\u5bf9\u8c61:\n * action \u5b9e\u4f8b\u3001request\u3001session\u3001application\u3001response\u3001parameters \u6570\u7ec4  attr...\n *\/\npublic class OgnlAction extends BaseServletAction {\n    private String name;\n    private User user = new User();\n    private List&lt;User&gt; list = new ArrayList&lt;User&gt;();\n\n    @Override\n    public String execute() throws Exception {\n        ActionContext actionContext = ActionContext.getContext();\n        ValueStack valueStack = actionContext.getValueStack();\n        valueStack.push(\"ognl\u540d\u79f0\");\n\n        name = \"\u5f20\u4e09\";\n        user.setName(\"\u674e\u56db\");\n        user.setPassword(\"abcd\");\n\n        list.add(new User(\"\u738b\u4e8c\", \"456\"));\n        list.add(new User(\"\u5c0f\u660e\", \"123\"));\n\n        actionContext.put(\"number\", \"request=1001\");\n        session.setAttribute(\"age\", \"session=23\");\n\n        return SUCCESS;\n    }\n\n    public String getName() { return name; }\n    public void setName(String name) { this.name = name; }\n    public User getUser() { return user; }\n    public void setUser(User user) { this.user = user; }\n    public List&lt;User&gt; getList() { return list; }\n    public void setList(List&lt;User&gt; list) { this.list = list; }\n}<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">JSP \u4fa7\u5bf9\u7167\u53d6\u503c\uff1a<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">&lt;body&gt;\n    &lt;!-- \u663e\u793a valuestack \u503c\u6808\u5185\u5bb9 --&gt;\n    &lt;s:property value=\"name\"\/&gt;\n    &lt;s:property value=\"user.name\"\/&gt;\n    &lt;s:property value=\"user.password\"\/&gt;\n\n    &lt;hr&gt;\n    &lt;s:iterator value=\"list\" var=\"u\"&gt;\n        &lt;s:property value=\"#u.name\"\/&gt;&lt;br&gt;\n    &lt;\/s:iterator&gt;\n\n    &lt;s:property value=\"#number\"\/&gt;\n    &lt;s:property value=\"#session.age\"\/&gt;\n\n    &lt;%-- ognl \u4ece action \u5bf9\u8c61\u4e2d\u53d6\u5c5e\u6027\u503c --%&gt;\n    &lt;s:property value=\"name\" default=\"\u9ed8\u8ba4\u503c\" \/&gt;\n    &lt;s:property value=\"user.username\" default=\"\u9ed8\u8ba4\u503c\" \/&gt;\n\n    &lt;br&gt;\u7528\u6237\u540d:\n    &lt;s:property value=\"userLists[1].username\" default=\"\u9ed8\u8ba4\u503c\" \/&gt;\n    \u5bc6\u7801:\n    &lt;s:property value=\"userLists[1].password\" default=\"\u9ed8\u8ba4\u503c\" \/&gt;\n    &lt;br&gt;\n    &lt;%-- ognl \u4ece ServletAPI request session .... \u5bf9\u8c61\u4e2d\u53d6\u5c5e\u6027\u503c --%&gt;\n    &lt;s:property value=\"#request.age\" default=\"request\u9ed8\u8ba4\u503c\" \/&gt;\n    &lt;s:property value=\"#session.sex\" default=\"session\u9ed8\u8ba4\u503c\" \/&gt;\n    &lt;!-- request &gt; session &gt; application --&gt;\n    &lt;s:property value=\"#attr.age\" default=\"attr\u9ed8\u8ba4\u503c\" \/&gt;\n\n    &lt;%-- ognl \u4ece valueStack \u4e2d\u53d6\u5c5e\u6027\u503c --%&gt;\n    &lt;s:property value=\"stack2.username\" default=\"valueStack\u9ed8\u8ba4\u503c\" \/&gt;\n\n    ${stack2.password}\n    &lt;br&gt; ${user.username}\n\n    &lt;br&gt;\n    &lt;s:form action=\"ognltag.jsp\" method=\"post\"&gt;\n        &lt;s:textfield label=\"\u7528\u6237\u540d\" name=\"user_name\"&gt;&lt;\/s:textfield&gt;\n        &lt;s:password label=\"\u5bc6\u7801\" name=\"pass_word\"&gt;&lt;\/s:password&gt;\n        &lt;s:submit value=\"\u63d0\u4ea4\"&gt;&lt;\/s:submit&gt;\n    &lt;\/s:form&gt;\n\n    &lt;s:property value=\"#parameters.user_name\"\/&gt;\n    &lt;s:property value=\"#parameters.pass_word\"\/&gt;\n\n    &lt;s:debug&gt;&lt;\/s:debug&gt;\n&lt;\/body&gt;<\/code><\/pre>\n<blockquote style=\"display: block; font-size: 0.9em; border-left: 3px solid #4870ac; padding: 0.5em 1em; margin: 0px; background: #f6f8fa; color: #40464f;\">\n<p style=\"margin: 1em 0px;\"><strong style=\"color: #4870ac;\">\u4e00\u53e5\u8bdd\u603b\u7ed3\uff1aAction \u5c5e\u6027\u76f4\u63a5\u5199\u5c5e\u6027\u540d\uff0ccontext \u91cc\u7684\u6570\u636e\u52a0 #\uff1b#session \/ #parameters \/ #attr \u5404\u7ba1\u4e00\u5c42\u8303\u56f4\uff0c%{} \u53ea\u5728\u6807\u7b7e\u5c5e\u6027\u88ab\u5f53\u6210\u5b57\u7b26\u4e32\u65f6\u628a OGNL \u6253\u5f00\u3002<\/strong><\/p>\n<\/blockquote>\n<\/section>\n","protected":false},"excerpt":{"rendered":"<p>OGNL \u5168\u79f0 Object-Graph Navigation Language\uff08\u5bf9\u8c61\u56fe\u5bfc\u822a\u8bed\u8a00\uff09\uff0c\u7528\u6765\u83b7\u53d6\u548c [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[87],"tags":[183,190],"_links":{"self":[{"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/posts\/1875"}],"collection":[{"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1875"}],"version-history":[{"count":3,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/posts\/1875\/revisions"}],"predecessor-version":[{"id":1977,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/posts\/1875\/revisions\/1977"}],"wp:attachment":[{"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1875"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1875"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1875"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}