【问题标题】:Struts2 - How to use <s:url> inside <s:select> to create hyperlinks?Struts2 - 如何在 <s:select> 中使用 <s:url> 创建超链接?
【发布时间】:2014-01-20 10:47:58
【问题描述】:

我有一个&lt;s:select list="links" headerKey="" headerValue="-- Select a link --" name="reportLinks" id="reportLinks" listValue="linkText" listKey="linkValue" /&gt;,我希望生成的选项的值属性等于枚举中映射的链接。

枚举:

public enum LinksRelatorios {

    1("One", "/reports", "inicializeReportOne", "PROJECT"),
    2("Two", "/reports", "inicializeReportTwo", "PROJECT"),
    3("Three", "/reports", "inicializeReportThree", "PROJECT"),
    4("four", "/reports", "inicializeReportFour", "PROJECT"),
    5("Five", "/reports", "inicializeReportFive", "PROJECT"),
    6("Six", "/reports", "inicializeReportSix", "PROJECT"),
    7("Seven", "/reports", "inicializeReportSeven", "PROJECT");

    private String linkText;
    private String nameSpace;
    private String action;
    private String project;

    private LinksRelatorios(final String textoLinkParam, final String nameSpaceParam, final String actionParam, final String projectParam) {
        this.linkText = linkTextParam;
        this.nameSpace = nameSpaceParam;
        this.action = actionParam;
        this.project = projectParam;
    }

    public String getLinkText() {
        return this.linkText;
    }

    public String getNameSpace() {
        return this.nameSpace;
    }

    public String getAction() {
        return this.action;
    }

    public String getProjeto() {
        return this.project;
    }

我想要做的是每个选项都具有 &lt;s:url namespace="namespace" action="action" /&gt; 的值,例如。

&lt;s:url&gt; 标记为我生成一个带有项目上下文和操作扩展的 URL,这就是我需要它的原因,以免在枚举中硬编码这些信息。

我的操作是正确的,我可以毫无问题地获取枚举,我使用&lt;s:iterator&gt; 进行了测试。

动作:

@Controller
@Scope("request")
public class InicioAction extends BaseAction {

    private static final long serialVersionUID = -1161409943678292285L;

    private static final LinksRelatorios[] links = LinksRelatorios.values();

    public String inicio() {
        this.addActionMessage(this.getText("msg.sucesso.saudacao.mensagem", new String[] { (String) BaseAction
                .getSession().getAttribute(Constantes.PERFIL) }));
        return Action.SUCCESS;
    }

    public static LinksRelatorios[] getLinks() {
        return InicioAction.links;
    }
}

我已经搜索过 google 和 SO,但找不到任何结果。

我已经阅读了http://struts.apache.org/release/2.3.x/docs/using-struts-2-tags.htmlhttp://struts.apache.org/release/2.3.x/docs/a.htmlhttp://struts.apache.org/release/2.3.x/docs/url.html 中的在线官方文档,但是与 PrimeFaces 或 RichFaces 等构建了自己的展示的框架相比,示例部分实际上相当糟糕。

【问题讨论】:

    标签: java jsp struts2 enums struts-tags


    【解决方案1】:

    我认为仅使用 struts 标签是不可能的。

    所以我只是做了下面的事情:

    <select id="linksInternacaoDomiciliar" name="linksInternacaoDomiciliar">
        <s:iterator value="links" var="link">
            <option value="<s:url namespace="%{#link.nameSpace}" action="%{#link.action}" />"><s:property value="textoLink"/></option>
        </s:iterator>
    </select>
    

    【讨论】:

    • 确定您可以在迭代器中使用 s:url 标记上的“var”属性,然后根据需要引用该属性。所以是的,使用 struts2 标签是可能的,但您的解决方案没有任何问题。这很明显/可读,这很重要。
    • 我做了你所说的所有事情,除了在 s:url 标签上使用“var”属性。 s:url 在 s:iterator 块内。您能否发表评论作为答案,以便更清楚地说明您要描述的内容?
    猜你喜欢
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多