我正在开发一个用户选择要使用的帐户的webapp,然后他们点击的所有网址都会引用该帐户。目前活动帐户存储在会话中,但这意味着它不包含在用户书签中,当用户会话超时时丢失,当用户共享链接时,它们不包括相关帐户...
我是否可以在每个网址中包含accountID而无需将手动添加到(相当大且仍在增长的)webapp中的所有网址
一种方法是将其作为路径的第一部分,因此所有URL都类似于:
/123/discussions/view.do
/123/account/edit.do
依此类推,其中“123”是帐户ID。
如果所有路径都是相对的,那就可以正常工作 - 但我还没弄清楚如何使用这种方法很好地使用Struts命名空间。通常,Struts2标记库生成的所有路径都以“/”开头,并且动作通配符匹配也不会启动,直到匹配命名空间后
。如果我能以某种方式在命名空间部分之后的路径中获取帐户ID,我认为我可以使用动作通配符执行正确的操作,但是困难的部分仍然是将ID添加到首先是网址。
最佳解决方案可能只是制作<s:a>
,<s:form>
和<s:url>
的自定义版本,但我不确定它有多容易。
重要有几个答案仅涉及如何将这些URL映射到Actions。此问题的难点实际上是如何将帐户ID导入所有URL和表单路径,而无需手动将其添加到整个应用程序中的每个URL。目前在我看来,唯一的方法是为URL和表单制作Struts JSP标记的自定义版本......所以任何关于如何做到这一点的指针都会很有用。
答案 0 :(得分:0)
您应该考虑使用wildcards的选择。如果您运行的是先前2.1+的Struts2版本,则需要升级到最新版本。作为解决方法,您可以使用UrlRewriter执行此操作。您还可以查看this答案以获取代码示例。
答案 1 :(得分:0)
您应该像这样定义您的行动:/{accountId}/discussion/view.do/
以下是此示例:Example