我刚看过Bob叔叔关于架构软件的演讲:
http://www.cleancoders.com/codecast/clean-code-episode-7/show
他谈到了ECB模式(实体 - 控制器 - 边界)
他坚持认为所有软件必须是主要的,尽管整个用例.
实际上,他重复了很多次关于工具,框架等的决定......必须推迟.
我对"边界"一词很感兴趣,所以我发现了这个解释:
在这里,我们看到边界与每个传递机制相关,如Web机制的形式(MarketingCampaignForm)等......
所以我的问题是:
boudaries必须知道将使用的交付机制的类型,并与Bob叔叔的观点相矛盾吗?
或者它们必须是简单的POJO代表简单的数据结构,它将在内部系统和交付机制之间共享; 并包含来自用户的输入和内部系统中控制器的输出?
为了使问题清楚,我举了一个例子:
考虑theSubscriber下面定义的形式first.jsp:
<s:form id="theSubscriber" name="theSubscriber" method="post" action="next.action">
<s:bean name="my.hibernate.actors.Subscriber" var="user">
<s:hidden name="id" key="id" value="%{user.id}" />
<s:textfield id="subscriberForename" name="forename"
key="forename" value="%{user.forename}" label="Forename" />
<s:textfield id="subscriberSurname" name="surname"
key="surname" value="%{user.surname}" label="Surname" />
</s:bean>
</s:form>
Run Code Online (Sandbox Code Playgroud)考虑next.action的以下动作类
public class NextAction extends ActionSupport {
private Subscriber user = new Subscriber();
private String forename;
public String getForename() {
return forename;
}
public void setForename(String forename) {
this.forename = forename;
}
public ManageSubscriber() {
// TODO Auto-generated constructor stub
}
public ManageSubscriber(Subscriber user) { …Run Code Online (Sandbox Code Playgroud)我在JSP页面中有多个不同类型的字段和一个按钮.这些字段是根据从我创建的元数据表中获取的信息生成的.
由于我不知道有多少和哪种类型的领域存在,我给id他们动态.我在JSP中使用Struts 2标记.
问题在于<s:select>标签:当我在id属性中给出scriplet时,它会显示以下错误:
org.apache.jasper.JasperException:/success.jsp(83,12)引用符号
<s:if test="%{#masterColDO.controlType=='dropdown'}">
<s:select styleClass="login-textbox"
style="width:130px"
list="#masterColDO.validation"
name="chngdColumnValues"
id=<%="columnId" + count%> />
</s:if>
<s:else>
<input type=<s:property value="#masterColDO.controlType" />
class="login-textbox "
name="chngdColumnValues"
id=<%="columnId" + count%> />
</s:else>
Run Code Online (Sandbox Code Playgroud)
Javascript如下:
var addUpdateBtnId = document.getElementById('addUpdateBtnId');
addUpdateBtnId.value='Update';
addUpdateBtnId.onclick = function() {
onClickUpdateBtn(rowIndex);
};
var selectedUpdateRow = xmlhttp.responseText.split(",");
for(var i = 0; i < selectedUpdateRow.length; i++){
var columnElementId = "columnId"+i;
document.getElementById(columnElementId).value = selectedUpdateRow[i];
}
document.getElementById("columnId"+(primaryKeyPos-1)).readOnly = true;
Run Code Online (Sandbox Code Playgroud) 我正在使用Struts 2.使用拦截器,我在每个页面执行开始时创建一个数据库连接.
因此,例如,如果用户转到"myAction.do",它将创建数据库连接,然后调用myAction.do方法.
我现在正在寻找的是拦截器或在页面执行后自动调用方法的任何其他方式,它将关闭数据库连接.
那可能吗?
我想在我的网站上使用Bootstrap.我有单选按钮,我试图使用bootstrap中的"按钮".
<td style="margin-bottom:0px; padding-bottom: 0px;font-size=12px;vertical-align:bottom;">
<div class="btn-group" data-toggle="buttons" id="topButtonDiv" >
<button type="button" class="btn btn-primary">Home
<input type="radio" id="radio1" ></button>
<button type="button" class="btn btn-primary">Home1
<input type="radio" id="radio2" > </button>
<button type="button" class="btn btn-primary">Home2
<input type="radio" id="radio7"> </button>
</div>
</td>
Run Code Online (Sandbox Code Playgroud)
我面临的问题是,我仍然看到单选按钮中的圆圈,在Bootstrap示例中,我看到没有这样的圆圈存在.
http://getbootstrap.com/javascript/#buttons-usage
你能让我知道我在这里缺少什么吗?
我将一些参数传递给ModelDriven<Transporter>通过查询字符串实现的动作类.
<s:form namespace="/admin_side" action="Test" id="dataForm" name="dataForm">
<s:url id="editURL" action="EditTest" escapeAmp="false">
<s:param name="transporterId" value="1"/>
<s:param name="transporterName" value="'DHL'"/>
</s:url>
<s:a href="%{editURL}">Click</s:a>
</s:form>
Run Code Online (Sandbox Code Playgroud)
动作类如下.
@Namespace("/admin_side")
@ResultPath("/WEB-INF/content")
@ParentPackage(value = "struts-default")
public final class TestAction extends ActionSupport
implements Serializable, Preparable, ModelDriven<Transporter>
{
private static final long serialVersionUID = 1L;
private Transporter transporter = new Transporter();
@Action(value = "Test",
results = {
@Result(name = ActionSupport.SUCCESS, location = "Test.jsp"),
@Result(name = ActionSupport.INPUT, location = "Test.jsp")},
interceptorRefs = {
@InterceptorRef(value = "paramsPrepareParamsStack",
params = {"params.acceptParamNames", "transporterId, …Run Code Online (Sandbox Code Playgroud) java model-driven struts2 interceptorstack struts2-interceptors
我有一个JPA 2 Web应用程序(Struts 2,Hibernate 4仅作为JPA实现).
当前的要求是将(非id)数字顺序字段(仅对某些行填充)添加到现有实体.根据特定条件插入新行时,我需要将新字段设置为its highest value + 1或NULL.
例如:
ID NEW_FIELD DESCRIPTION
--------------------------------
1 1 bla bla
2 bla bla <--- unmatched: not needed here
3 bla bla <--- unmatched: not needed here
4 2 bla bla
5 3 bla bla
6 4 bla bla
7 bla bla <--- unmatched: not needed here
8 5 bla bla
9 bla bla <--- unmatched: not needed here
10 6 bla bla
Run Code Online (Sandbox Code Playgroud)
在旧的SQL中,它将是这样的:
INSERT INTO myTable ( …Run Code Online (Sandbox Code Playgroud) 我在我的struts.xml和所有表单中添加了一个拦截器,以防止跨站点请求伪造攻击.我想知道我是否还应该做其他事情?比如检索令牌并与提交的表格一起匹配表格,以防它不会自动完成.
<interceptors>
<interceptor-stack name="defaultSecurityStack">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="tokenSession">
<param name="excludeMethods">*</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="defaultSecurityStack"/>
Run Code Online (Sandbox Code Playgroud)
所有表格都有
<s:form ...>
<s:token/>
...
</s:form>
Run Code Online (Sandbox Code Playgroud) 我正在创建一个Struts2 Web应用程序.
我想要一个URL www.xyz.com/portal/orgCode/signin,这个orgCode是动态的,所以我正在使用正则表达式.
我配置struts.xml如:
<constant name="struts.devMode" value="false" />
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<constant name="struts.action.extension" value=",html,action" />
<constant name="struts.action.excludePattern" value=".*unfiltered.*,.*\\.nofilter" />
<constant name="struts.multipart.maxSize" value="2097152000"/>
<constant name="struts.enable.SlashesInActionNames" value="true"/>
<constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/>
<constant name="struts.patternMatcher" value="regex" />
<package name="portal" namespace="/portal/{orgCode}" extends="default">
<interceptors>
<interceptor name="portalUrlInterceptor"
class="com.wtmit.service.portal.interceptor.PortalCommonInterceptor">
</interceptor>
<interceptor-stack name="commonPortalUrlInterceptor">
<interceptor-ref name="portalUrlInterceptor" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<action name="signin" method="signin"
class="com.wtmit.service.portal.action.PortalSignInAction">
<interceptor-ref name="commonPortalUrlInterceptor"></interceptor-ref>
<result name="portalSignIn" type="tiles">portalSignIn</result>
<result name="successLogin" type="redirect">home</result>
</action>
</package>
Run Code Online (Sandbox Code Playgroud)
这工作正常,但像www.xyz.com/mainLogin以下网址不适用于以下配置:
<package name="main" namespace="/" extends="default">
<action name="*Login" method="{0}" class="com.service.user.action.LoginAction">
<result …Run Code Online (Sandbox Code Playgroud) 我正在尝试转义字符
<s:select list="#{'Achat d'eclair':'Achat d'eclair'}" />
Run Code Online (Sandbox Code Playgroud)
如何Achat d'eclair在 Struts2 标签中转义?
java ×8
struts2 ×7
jsp ×3
ognl ×3
architecture ×1
csrf ×1
ecb-pattern ×1
friendly-url ×1
hibernate ×1
html ×1
interceptor ×1
javascript ×1
jpa ×1
model-driven ×1
pretty-urls ×1
regex ×1
security ×1
sql ×1
struts ×1
struts-tags ×1
xss ×1