Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsp 在<;s:a>;Struts 2标签不工作_Jsp_Url_Struts2_Struts Tags - Fatal编程技术网

Jsp 在<;s:a>;Struts 2标签不工作

Jsp 在<;s:a>;Struts 2标签不工作,jsp,url,struts2,struts-tags,Jsp,Url,Struts2,Struts Tags,根据文档,我可以使用includeContext=“false”避免URL中包含实际上下文 当我使用这一行时: <s:a action="persist" namespace="books" includeParams="get" includeContext="false" cssClass="btn btn-xs btn-success"> <s:text name=&

根据文档,我可以使用
includeContext=“false”
避免URL中包含实际上下文

当我使用这一行时:

<s:a action="persist" namespace="books" includeParams="get" includeContext="false" cssClass="btn btn-xs btn-success">
   <s:text name="actions.books.edit" />
   <s:param name="idBook"><s:property value="id" /></s:param>
</s:a>
但是当前的URL:

http://localhost:8080/ejercicio4-web/books/all.action
如果我使用
组件,如果它工作正常:

http://localhost:8080/ejercicio4-web/books/persist.action?idBook=6
struts.xml
完成配置:

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="false"/>
    <constant name="struts.devMode" value="true"/>
    <!-- Use Guice as the ObjectFactory for this application -->
    <constant name="struts.objectFactory" value="guice" />
    <constant name="struts.custom.i18n.resources" value="global" />
    <constant name="struts.url.includeParams" value="get" />
    <!-- Default App Package -->
    <package name="app-default" abstract="true" extends="struts-default, tiles-default">
        <interceptors>
            <interceptor name="saveParamsOnSession" class="interceptors.SaveParamsOnSession"/>
            <interceptor-stack name="secure">
                <interceptor-ref name="roles">
                    <param name="allowedRoles">ADMIN</param>
                </interceptor-ref>
                <interceptor-ref name="paramsPrepareParamsStack"/>
            </interceptor-stack>
            <interceptor-stack name="storeFlashDataStack">
                <interceptor-ref name="store">
                    <param name="operationMode">STORE</param>
                </interceptor-ref>
                <interceptor-ref name="defaultStack" />
            </interceptor-stack>
            <interceptor-stack name="storeParamsPrepareParamsStack">
                <interceptor-ref name="store">
                    <param name="operationMode">STORE</param>
                </interceptor-ref>
                <interceptor-ref name="paramsPrepareParamsStack" />
                <interceptor-ref name="saveParamsOnSession" />
            </interceptor-stack>
        </interceptors>
        <global-results>
            <result name="ejbexception" type="tiles">app.error.ejbexception</result>
        </global-results>
        <global-exception-mappings>
            <exception-mapping exception="javax.ejb.EJBException" result="ejbexception" />
        </global-exception-mappings>
    </package>
    <!-- Books package -->
    <package name="books" namespace="/books" extends="app-default">
        <!--<default-interceptor-ref name="secure"/>-->
        <default-action-ref name="home" />
        <action name="home" class="actions.BaseAction">
            <result type="tiles">app.books.home</result>
        </action>
        <!-- persist book -->
        <action name="persist" class="actions.books.PersistBookAction">
            <interceptor-ref name="store">
                <param name="operationMode">RETRIEVE</param>
            </interceptor-ref>
            <interceptor-ref name="servletConfig" />
            <interceptor-ref name="params" />
            <interceptor-ref name="prepare" />
            <result type="tiles">app.books.persist</result>
        </action>
        <action name="proccess" class="actions.books.PersistBookAction" method="proccess">
            <interceptor-ref name="storeParamsPrepareParamsStack" />
            <interceptor-ref name="fileUpload">
                <param name="allowedTypes">application/pdf</param>
            </interceptor-ref>
            <exception-mapping exception="java.io.IOException" result="input" />
            <result name="input" type="redirectAction">persist.action?idBook=${book.id}</result>
            <result type="redirectAction">persist.action?idBook=${book.id}</result>
        </action>
        <!-- Show Book -->
        <action name="show" class="actions.books.BookAction">
            <interceptor-ref name="paramsPrepareParamsStack" />
            <result type="tiles">app.books.show</result>
        </action>
        <action name="pdf" class="actions.books.ShowPDFAction">
            <interceptor-ref name="basicStack" />
            <result name="success" type="stream">
                <param name="contentType">application/pdf</param>
                <param name="inputName">inputStream</param>
                <param name="contentDisposition">inline;filename="test.pdf"</param>
                <param name="bufferSize">1024</param>
            </result>
        </action>
        <!-- Remove book -->
        <action name="remove" class="actions.books.RemoveBookAction">
            <interceptor-ref name="store">
                <param name="operationMode">STORE</param>
            </interceptor-ref>
            <interceptor-ref name="paramsPrepareParamsStack" />
            <result name="input" type="redirectAction">all</result>
            <result type="redirectAction">all</result>
        </action>
        <!-- Books list -->
        <action name="all" class="actions.books.BooksAction">
            <interceptor-ref name="storeParamsPrepareParamsStack" />
            <result type="tiles">app.books.all</result>
        </action>
    </package>
     <!-- Authors package -->
    <package name="authors" namespace="/authors" extends="app-default">
        <action name="create" class="actions.authors.CreateAuthorAction">
            <interceptor-ref name="storeFlashDataStack" />
            <result name="input" type="redirectAction">books/persist</result>
            <result type="redirectAction">
                <param name="actionName">persist</param>
                <param name="namespace">/books</param>
            </result>
        </action>
    </package>
    <!-- Accounts package -->
    <package name="accounts" namespace="/accounts" extends="app-default">
        <action name="login" class="actions.accounts.SigninAction">
            <interceptor-ref name="store">
                <param name="operationMode">RETRIEVE</param>
            </interceptor-ref>
            <result>/WEB-INF/views/accounts/login.jsp</result>
        </action>
        <action name="check" class="actions.accounts.SigninAction" method="check">
            <interceptor-ref name="store">
                <param name="operationMode">STORE</param>
            </interceptor-ref>
            <result name="input" type="redirectAction">login</result>
            <result type="redirectAction">login</result>
        </action>
        <action name="signup" class="actions.accounts.PreCreateUserAction">
            <interceptor-ref name="store">
                <param name="operationMode">RETRIEVE</param>
            </interceptor-ref>
            <result type="tiles">app.accounts.signup</result>
            <result name="input" type="tiles">app.accounts.signup</result>
        </action>
        <action name="create" class="actions.accounts.PostCreateUserAction">
            <interceptor-ref name="store">
                <param name="operationMode">STORE</param>
            </interceptor-ref>
            <interceptor-ref name="fileUpload">
                <param name="allowedTypes">image/jpeg,image/jpg,image/png</param>
            </interceptor-ref>
            <interceptor-ref name="defaultStack" />
            <result name="input" type="redirectAction">signup</result>
            <result type="redirectAction">signup</result>
        </action>
    </package>
</struts>

管理
贮藏
贮藏
app.error.ejbexception
app.books.home
检索
app.books.persist
申请表格/pdf
persist.action?idBook=${book.id}
persist.action?idBook=${book.id}
app.books.show
申请表格/pdf
输入流
内联;filename=“test.pdf”
1024
贮藏
全部的
全部的
app.books.all
书籍/坚持
坚持
/书
检索
/WEB-INF/views/accounts/login.jsp
贮藏
登录
登录
检索
app.accounts.signup
app.accounts.signup
贮藏
图像/jpeg,图像/jpg,图像/png
报名
报名

为什么要使用
includeContext
属性?你应该移除它

<s:a action="persist" namespace="books" cssClass="btn btn-xs btn-success">
   <s:text name="actions.books.edit" />
   <s:param name="idBook"><s:property value="id" /></s:param>
</s:a>

该框架使用
UrlHelper
为所有标记生成URL,因此它们无法预测如何使用生成的代码
includeContext
是一个
Boolean
属性,表示

“URL中是否应包含实际上下文”


创建HTML的标记。此标记支持相同的属性 作为“url”标记,包括使用“param”标记的嵌套参数


还有,为什么要使用
includeParams=“get”
?url中只有一个参数。

使用includeContext避免将操作的url与当前url连接起来,正如我上面解释的那样。如果与includeContext一起使用='false',如果它工作正常,则不会将当前url与操作的url连接起来。includeParams=“get”例如,如果当前URL为http://localhost:8080/exercise4web/books/all.action?query=styles不生成http://localhost:8080/exercise4web/books/persist.action?query=styles&idBook=6,则会阻止。因为默认值是includeParams=“all”。但是,正如您所说的那样,它不支持与“url”标记相同的属性。但是得到的结果不一样。您在
标记中使用了
名称空间
属性。我需要使用名称空间属性。在我也使用它,没有问题哪一个S2版本?您的包名称空间是什么?试试
。我正在使用struts 2.5.2。如果使用namespace=“/books”,则结果URL为:。应该是。看我的代码片段,没有
includeContext
属性。
<s:a action="persist" namespace="books" cssClass="btn btn-xs btn-success">
   <s:text name="actions.books.edit" />
   <s:param name="idBook"><s:property value="id" /></s:param>
</s:a>