2017-02-21 84 views
0

我已经创建了表单login.jsp,并且当用户输入用户名&密码时,我想创建url:/companyName/username如何在struts2中创建动态url?

例子:如果公司名称是“ABC”和用户名是“parth1”,那么URL是"http://localhost:8080/Temp_Central_Emp/abc/parth1/afterLogin.jsp"

我得到companyName基于用户名的数据库。

文件:的login.jsp

<s:form action="afterLogin" method="post"> 
    <s:textfield label="Enter username" key="userId" maxlength="5" size="30" id="userId"/> 
    <s:password label="Enter password" key="userPsw" size="30" /> 
    <tr> 
     <td></td> 
     <td> 
      <img src="<c:url value='simple-captcha.png' />" /> 
      <br /> 
      <p>Press F5 for refresh.</p> 
     </td> 
    </tr> 
    <s:textfield label="Enter code" key="captchaResponse" size="30" /> 
    <s:submit value="Login" /> 
</s:form> 

文件:struts.xml的

<struts> 
<constant name="struts.enable.SlashesInActionNames" value="true"/> 
<constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/> 
<constant name="struts.devMode" value="true" /> 
<package name="a" extends="struts-default"> 

    <action name="afterLogin" class="com.parth.LoginAction"> 
     <result name="success">/afterLogin.jsp</result> 
    </action> 

</package> 

文件:LoginAction.java

public class LoginAction extends ActionSupport{ 

private Map<String, Object> session; 
private String userId; 
private String userPsw; 
private String url; 

private static final long serialVersionUID = 1L; 

@Override 
@Action(value="{url}/afterLogin") 
public String execute() throws Exception {  
    // business logic to insert user into database 
    url = "/companyName/" + userId; 
    return SUCCESS; 
} 

/* Getters and Setters */ 
} 

我提到这个链接,但我的需求是不同的。 Creating dynamic URL with 2 action parameters in Struts 2 using OGNL

我也尝试从这个链接代码,但仍然没有解决它。

+0

检查了这一点http://stackoverflow.com/questions/23780282/how-to-create-custom-urls-with-struts2like-www-twitter-com-goodyzain – goodyzain

+0

@goodyzain当我添加** <常数名称=“struts.patternMatcher”值=“正则表达式”/> **我收到错误。 而且我还根据您的问题的答案更改了我的代码,但仍无法正常工作。 如果您知道如何生成动态网址,请根据上述问题向我提供代码。 –

+0

当你添加Advanced wildCard <常量名=“struts.patternMatcher”value =“regex”/>?时,你会得到什么错误? – goodyzain

回答

0

尝试把那个网址变量在struts.xml

<action name="afterLogin" class="com.parth.LoginAction"> 
    <result name="success">${url}/afterLogin.jsp</result> 
</action> 

并删除注释Action这里:

@Override 
//@Action(value="{url}/afterLogin") // remove this 
public String execute() throws Exception {  
    // business logic to insert user into database 
    url = "/companyName/" + userId; 
    return SUCCESS; 
} 
+0

谢谢。 但我收到错误:** HTTP状态404 - /Temp_Central_Emp/companyName/parth/afterLogin.jsp** –

+0

我认为您还需要动态更改您的companyName。 – msagala25

+0

如果您有想法,请编辑您编写的上述代码。 –

0

结果应该是重定向动作类型的,如果你想改变网址并遵循PRG模式。见Parameters in configuration results

<result name="success" type="redirectAction">afterLogin?companyName=${companyName}&userId=${userId}</result> 

<action name="afterLogin"> 
    <result>/afterLogin.jsp</result> 
</action> 
+0

我在struts.xml中使用你的代码,但它不起作用。 –

+0

你能告诉我在哪里,我在struts.xml中编写代码在

+0

http://struts.apache.org/docs/result-configuration.html –