Posts Tagged ‘解决’

使用CSS解决文字环绕图片问题的代码

星期三, 06月 4th, 2008


上图是美工为一站点制作de图文并茂de新闻标题列表,采用表格进行布局,右上和下部分分布在两个单元格中,程序实现起来可不太容易:要么分两次查询,一次取4条,一次取5条;要么一次取出9条,再分在两个单元格中显示.能不能通过设置图片de属性,让文字和图片像Word中一样可以四周环绕对齐?这样程序就不用理会图片,只负责一次读取显示就可以了.经测试将图片defloat属性设置为left可解决我de问题,效果如下图:

点击运行可以看到效果:
[Ctrl A 全选 提示:您可先修改部分相关代码,再按运行]

解决 select 挡住div的解决方法

星期三, 06月 4th, 2008

在div里加入下面de相关代码,根据需要调整就可以了
[复制此相关代码]CODE:
<iframe src=”javascript:false” scrolling=”no” frameborder=”0″ style=”z-index:-1;position:absolute; top:; left:;width:;height:;”>
</iframe>

CSS解决未知高度垂直居中的问题

星期三, 06月 4th, 2008

除特别说明外,本站内容采用创作共用授权署名和非商业用途,请尊重劳动成果.

原文标题:Vertical Centering in CSS

副标题:Yuhu’s Definitive Solution with Unknown Height

翻译:forestgan

尽管有CSSdevertical-align特性,但是并不能有效解决未知高度de垂直居中问题(在一个DIV标签里有未知高度de文本或图片de情况下).

标准浏览器如Mozilla, Opera, Safari等.,可将父级元素显示方式设定为TABLE(display: table;) ,内部子元素定为table-cell (display: table-cell),通过vertical-align特性使其垂直居中,但非标准浏览器是不支持de.

非标准浏览器只能在子元素里设距顶部50%,里面再套个元素距顶部-50% 来抵消.

CSS
body {padding: 0; margin: 0;}
body,html{height: 100%;}
#outer {height: 100%; overflow: hidden; position: relative;width: 100%; background:ivory;}
#outer[id] {display: table; position: static;}
#middle {position: absolute; top: 50%;} /* for explorer only*/
#middle[id] {display: table-cell; vertical-align: middle; position: static;}
#inner {position: relative; top: -50%;width: 400px;margin: 0 auto;} /* for explorer only */
div.greenBorder {border: 1px solid green; background-color: ivory;}

XHTML






以上CSS相关代码de优点是没有hacks,采用了IE不支持deCSS2选择器#value[id].

CSS2选择器#value[id]相当于选择器#value,但是Internet Explorer不支持这种类型de选择器.同样地.value[class],相当于.value,这些只有标准浏览器能读懂.

测试:Firefox1.5、Opera9.0、IE6.0、IE5.0通过.

解决URL中含有-与号-不符合标准问题

星期三, 06月 4th, 2008

今天在网站重构时,遇到了这个问题,URL需要传递两个变量(abc.asp?type=xxx&id=xxx),可是加了“&”后不能通过W3C检验,搜索了一番没有找到结果,只好去查英文网站查了下,用“& a m p;”代替“&”就可以解决这个问题了.
abc.asp?type=xxx& a m p;id=xxx
简单de翻译了下不能通过检验de原因[:)英文能力有限]
是因为Netscapede3.x版本不兼容这个标记.只有“&”这个标记存在于HTMLdeURL中时才需要用“& a m p;”来代替,当它作为特殊符号de时候,比如在aspde中不需要替代.

WEB页面多语言支持解决方案

星期二, 06月 3rd, 2008

首先建立语言档,在项目中加入.resx文件
例如:
message.zh-cn.resx ‘简体中文
message.zh-tw.resx ‘繁体中文
message.en ‘英文
…………..
=========================================
然后利用Name –Value 键值对 填入您要在页面上显示de语言
如:
name value
message.zh-cn.resx中:
res_loginbname 登陆名 :
message.zh-tw.resx中:
res_loginbname 登陸名 :
message.zh-cn.resx中:
res_loginbname Login Name :

=========================================
然后在Golbal.asax中加入多语言设定支持相关代码(浏览器需要支持Cookie)

‘=========================================
‘ Application_BeginRequest Event

‘ The Application_BeginRequest method is an ASP.NET event that executes
‘ on each web request into the portal application.

‘ The thread culture is set for each request using the language
‘ settings

‘=========================================
Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)
Try
If Not Request.Cookies(”resource”) Is Nothing Or Request.Cookies(”resource”).Value = “” Then
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.Cookies(”resource”).Value)
Else
Thread.CurrentThread.CurrentCulture = New CultureInfo(ConfigurationSettings.AppSettings(”DefaultCulture”))
End If
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture
Catch ex As Exception
Thread.CurrentThread.CurrentCulture = New CultureInfo(ConfigurationSettings.AppSettings(”DefaultCulture”))
End Try
End Sub ‘Application_BeginRequest

在Web.Config中加入如下相关代码,用于设定编码和默认语种,在Global.asax中有调用:

=========================================
<globalization requestEncoding=”utf-8″ responseEncoding=”utf-8″ />
<appSettings>
<add key=”DefaultCulture” value=”zh-cn” />
<!– zh-cn:簡體中文 zh-tw:繁體中文 en:英文 –>
</appSettings>

=========================================
页面相关代码中使用多语言支持:

Imports System.Resources

Public Class 类名
Inherits System.Web.UI.Page
Protected LocRM As ResourceManager = New ResourceManager(”项目文件名.message”, GetType(类名).Assembly)

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
lblLogin.Text = LocRM.GetString(”res_login”)
End Sub
End Class


=========================================

到这里多语言支持de工作就作完了,接下来自己去慢慢Key
message.zh-cn.resx ‘简体中文
message.zh-tw.resx ‘繁体中文
message.en ‘英文

这几个语言档吧

ASP.Net防止刷新自动触发事件的解决方案

星期二, 06月 3rd, 2008

  使用asp.net,在刷新页面de时候会自动触发服务器端de事件.举个简单de例子,如:一个注册页面,我填写完注册信息之后,如果按F5刷新之后,会自动触发到Button事件上,这样就造成了又注册了一次de麻烦.

  我先前de解决方案:用关键字查询,如有相同,则提示已有此用户.

  但是这种方案不能在没有表识de情况下使用,他会重新提交.鉴于此,我寻找了一种新de解决方案,很庆幸,在朋友de提点下,迸发了这样de解决方案,肯定有更好de解决方案,不吝赐教.

  解决思路:刷新时,捕捉KeyPress,让他触发其他无用de事件.

  1、捕捉F5事件deJavaScript

window.document.onkeydown = KeyStroke;
function KeyStroke()
{
var key = event.keyCode;
event.srcElement.releaseCapture();
if(key == 116)
{
document.getElementById(”Button1″).click();
event.keyCode=0;
event.returnValue=false;
}
}

  2、aspx页面放置一个Button

<asp:Button id=”Button1″ style=”Z-INDEX: 102; LEFT: 344px; POSITION: absolute; TOP: 408px; WIDTH: 0px;” runat=”server”
Text=”Button”></asp:Button>

  3、Button事件

private void Button1_Click(object sender, System.EventArgs e)
{
Response.Write( “You have pressed the key F5″);
}

  这个“舍车保帅”de方案,能解决刷新自动触发事件de解决方案这个小问题,如果谁有更好de方案,希望告诉我一声,不胜感激!

解决 ASP.NET中目录访问权限的问题

星期二, 06月 3rd, 2008

  症状:从 ASP.NET 应用程序,访问远程增强安全性de资源时可能会收到以下错误信息
  登录失败:未知用户名或错误密码.

  解决办法:
1 在 Web 服务器上修改 ASPNET 帐户de密码为 password .
2 在远程文件服务器上,修改 ASPNET 帐户(如果没有该帐户则创建之)de密码为 password .
3 在远程文件服务器上,为 ASPNET 帐户设置相应目录de访问权限.
4 修改 Web.config 文件,在 <system.web> 配置节中添加:
<identity impersonate=”true” userName=”ASPNET” password=”password” />
5 上述三处de密码可任意设置,但必须保持一致.

第一次用.net2.0 LOGIN登陆控件的困惑和解决方法

星期二, 06月 3rd, 2008

1、我没有真正de服务器,我只是租用了.net2.0 SQLserver空间,SQL数据库名是固定de.
2、空间提供商不可能给我设定数据源或给您aspnetdb数据库权限.
3、我没有服务器de \Windows\Microsoft.Net\Framework\v2.x\Config 权限.

已知上面三点,如果直接把本地测试好de项目传到服务器肯定会出错(因为他默认是调用\Windows\Microsoft.Net\Framework\v2.x\Config ),我认为好de解决方法是把aspnetdb数据库内容全部导入自己de远程SQL数据库后,再定义项目deweb.config数据库连接字符串.
web.config
<?xml version=”1.0″?>

<!–
注意: 除了手动编辑此文件以外,您还可以使用
Web 管理工具来配置应用程序de设置.可以使用 Visual Studio 中de
“网站”->“Asp.Net 配置”选项.
设置和注释de完整列表在
machine.config.comments 中,该文件通常位于
\Windows\Microsoft.Net\Framework\v2.x\Config 中
–>
<configuration xmlns=”http://schemas.microsoft.com/.NetConfiguration/v2.0“>
<connectionStrings>

<!–定义数据库连接–>
<add name=”DbName” connectionString=”Persist Security Info=False;server=127.0.0.1;database=aspnetdb;uid=sa;pwd=123;pooling=true”/>
</connectionStrings>
<appSettings>
</appSettings>

<system.web>

<!–
connectionStringName 数据库连接.这个要在web.config设置
enablePasswordRetrieval 获得一个值,指示当前成员资格提供程序是否配置为允许用户检索其密码.
enablePasswordReset 获得一个值,指示当前成员资格提供程序是否配置为允许用户重置其密码.
requiresQuestionAndAnswer 获取一个值,该值指示默认成员资格提供程序是否要求用户在进行密码重置和检索时回答密码提示问题.
applicationName 获取或设置应用程序de名称.
requiresUniqueEmail 指示用户在创建用户时是否必须提供唯一de电子邮件地址值.
passwordFormat 指示在成员资格数据存储区中存储密码de格式.下面有详细说明
maxInvalidPasswordAttempts 获取锁定成员资格用户前允许de无效密码或无效密码提示问题答案尝试次数.
minRequiredPasswordLength 获取密码所要求de最小长度.
minRequiredNonalphanumericCharacters 获取有效密码中必须包含de最少特殊字符数.
passwordAttemptWindow 获取在锁定成员资格用户之前允许de最大无效密码或无效密码提示问题答案尝试次数de分钟数.

对PasswordFormat de详细说明
属性指示存储密码de格式.密码可以采用 Clear、Encrypted 和 Hashed 密码格式存储.Clear 密码以明文形式存储,这可以提高存储和检索密码de性能,但安全性较差,当数据源安全性受到威胁时此类密码很容易被读取.Encrypted 密码在存储时进行了加密,可以在比较或检索密码时进行解密.此类密码在存储和检索时需要进行额外de处理,但比较安全,在数据源de安全性受到威胁时不容易被获取.Hashed 密码在存储到数据库时使用单向哈希算法和随机生成de salt 值进行哈希处理.在验证某一密码时,将用数据库中de salt 值对该密码进行哈希计算以进行验证.无法检索哈希密码.
–>


<roleManager enabled=”true” />
<membership>
<providers>
<remove name=”AspNetSqlMembershipProvider”/>
<add name=”AspNetSqlMembershipProvider”
type=” System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”
connectionStringName=”DbName”
enablePasswordRetrieval=”false”
enablePasswordReset=”true”
requiresQuestionAndAnswer=”true”
applicationName=”/”
requiresUniqueEmail=”false”
passwordFormat=”Hashed”
maxInvalidPasswordAttempts=”5″
minRequiredPasswordLength=”6″
minRequiredNonalphanumericCharacters=”0″
passwordAttemptWindow=”10″
passwordStrengthRegularExpression=”" />
</providers>
</membership>


<!–
设置 compilation debug=”true” 可将调试符号插入
已编译de页面中.但由于这会
影响性能,因此只应在开发过程中设置
此值.

Visual Basic 选项:
设置 strict=”true” 将禁止所有会导致
数据丢失de类型转换.
设置 explicit=”true” 将强制声明所有变量.
–>
<compilation debug=”true” strict=”false” explicit=”true”/>
<pages>
<namespaces>
<clear/>
<add namespace=”System”/>
<add namespace=”System.Collections”/>
<add namespace=”System.Collections.Specialized”/>
<add namespace=”System.Configuration”/>
<add namespace=”System.Text”/>
<add namespace=”System.Text.RegularExpressions”/>
<add namespace=”System.Web”/>
<add namespace=”System.Web.Caching”/>
<add namespace=”System.Web.SessionState”/>
<add namespace=”System.Web.Security”/>
<add namespace=”System.Web.Profile”/>
<add namespace=”System.Web.UI”/>
<add namespace=”System.Web.UI.WebControls”/>
<add namespace=”System.Web.UI.WebControls.WebParts”/>
<add namespace=”System.Web.UI.HtmlControls”/>
</namespaces>
</pages>
<!–
通过 <authentication> 节可以配置 ASP.NET 使用de
安全身份验证模式,
以标识传入de用户.
–>
<authentication mode=”Forms” />
<!–
如果在执行请求de过程中出现未处理de错误,
则通过 <customErrors> 节可以配置相应de处理步骤.具体说来,
开发人员通过该节可以配置
要显示de html 错误页
以代替错误堆栈跟踪.

<customErrors mode=”RemoteOnly” defaultRedirect=”GenericErrorPage.htm”>
<error statusCode=”403″ redirect=”NoAccess.htm” />
<error statusCode=”404″ redirect=”FileNotFound.htm” />
</customErrors>
–>

</system.web>
</configuration>

注:membership节点de那个注释是转载de,忘了地址了.

ASP.NET 2005 Treeview终极解决方案

星期二, 06月 3rd, 2008

  这几天在写HRMde时候 这问题搞了我两天,开始在使用Google 找了半天都是一堆垃圾,都是使用算法de较多, 后来就去了demsdn.yesky.com 找到点启示. 好了废话多说无用.
  首先表结构如下 表名 Test
按此在新窗口浏览图片
  写个存储过程 GetTreeview
  这个不用我说了吧下面用到
  为了速度缓存DataTable
Public Function GetTreeTable() As DataTable
 Dim dt As New DataTable()
 dt = HttpContext.Current.Cache(”Treeview”)
 If dt Is Nothing Then
  Dim Conn As New SqlConnection
  Dim clsConnDatabase As New ConnectionDatabase
  Conn = clsConnDatabase.ConnDatabase
  Dim Command As New SqlCommand
  Command.Connection = Conn
  Command.CommandText = “GetTreeview”
  Command.CommandType = CommandType.StoredProcedure
  Command.ExecuteNonQuery()
  Dim da As New SqlDataAdapter(Command)
  dt = New DataTable()
  da.Fill(dt)
  HttpContext.Current.Cache.Insert(”Treeview”, dt)
 End If
 Return dt
End Function
  这里是主要阿
Public Sub PopulateNodes(ByVal nodes As TreeNodeCollection, Optional ByVal intParentID As Int32 = 0)
 Dim dt As New DataTable()
 dt = clsWebForms.GetTreeTable()
 Dim strExpression As String
 strExpression = “[parentID] = ” & intParentID
 Dim foundRows() As DataRow
 foundRows = dt.Select(strExpression)
 
 Dim I As Integer
 For I = 0 To foundRows.GetUpperBound(0)
  Dim tn As New TreeNode()
  tn.Text = foundRows(I).Item(“TableName”).ToString()
  tn.Value = foundRows(I).Item(”ID”).ToString()
  Dim dr() As DataRow
  dr = dt.Select(”[parentID] = ” & tn.Value)
  If dr.GetUpperBound(0) > -1 Then
   tn.PopulateOnDemand = True
  End If
  nodes.Add(tn)
 Next
End Sub
  建立WebForm 放入Treeview
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
     
 If Not Page.IsPostBack Then
  PopulateNodes(TreeView1.Nodes, 0)
 End If
End Sub
Protected Sub TreeView1_TreeNodePopulate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.TreeNodeEventArgs) Handles TreeView1.TreeNodePopulate
 PopulateNodes(e.Node.ChildNodes, e.Node.Value)
End Sub
  至于速度我没测试,如果大家有兴趣帮忙测测.

搭建SSH时的思考和遇到的几个问题的解决方法

星期一, 06月 2nd, 2008

SSH流行很久了,一直看到官方文档和网上都在讲如何整合SSH,讨论各种整合de优缺点.今天我比较闲,也用我de一些想法来试着整合这三个最流行de框架.
本次所用版本为:Struts 1.3.9 Spring 2.5 Hiberante 3.2
开发工具和环境为:Eclipse 3.3 MyEclipse 6.0 JBoss 4.2 Tomcat
用SSH时,我de架构自然就会分成三层,即表现层,逻辑层和持久层,按照Martin Flowerde指导思想,耦合越少越好,下层为上层提供服务,这也是Rod开发Springde指导思想之一,所以我首先想到de就是如何减少到最低de耦合.
根据Spring 2.0官方文档中推荐de做法,Spring与Struts1.x集成,有采用代理类de方式,也有用ActionSupportde方式,但是我认为这两种方式无疑都有很强de侵入性和依赖性,这与Springde思想有些矛盾.
我采用AutowiringRequestProcessor来做,这个类会自动为您装载您所需要deService,根据其Java Docde提示,其默认是byType匹配de,当然您也可以用byNamede方式,我认为以Typede方式就OK了.来看看两个配置文件吧,先来看看Strutsde配置文件struts-config.xml:
1 <? xml version=”1.0″ encoding=”UTF-8″ ?>
2 <! DOCTYPE struts-config PUBLIC “-//Apache Software Foundation//DTD Struts Configuration 1.3//EN” “http://struts.apache.org/dtds/struts-config_1_3.dtd” >
3
4 < struts-config >
5 < form-beans >
6 < form-bean name =”loginForm” type =”com.***.ssh.view.login.LoginForm” />
7 </ form-beans >
8
9 < global-exceptions />
10 < global-forwards />
11 < action-mappings >
12 < action name =”loginForm” path =”/login” scope =”request”
13 type =”com.***.ssh.view.login.LoginAction” validate =”false” />
14 </ action-mappings >
15
16 < controller
17 processorClass =”org.springframework.web.struts.AutowiringRequestProcessor” />
18
19 < message-resources parameter =”ApplicationResources” />
20 </ struts-config >
21
22
这个文件中可以发现,跟没有与Spring集成时就一点不一样,多了一行:
<controller processorClass=”org.springframework.web.struts.AutowiringRequestProcessor” />
再来看看Springde配置文件applicationContext.xml:
1 <? xml version=”1.0″ encoding=”UTF-8″ ?>
2 <! DOCTYPE beans PUBLIC “-//SPRING//DTD BEAN//EN” “http://www.springframework.org/dtd/spring-beans.dtd” >
3
4 < beans >
5
6 < bean id =”SSHSessionFactory”
7 class =”org.springframework.orm.hibernate3.LocalSessionFactoryBean” >
8 < property name =”configLocation” >
9 < value > classpath:hibernate.cfg.xml </ value >
10 </ property >
11 </ bean >
12
13 < bean name =”LoginService”
14 class =”com.***.ssh.biz.login.LoginService” singleton =”false” >
15 < property name =”dao” >
16 < ref bean =”UsersDao” />
17 </ property >
18 </ bean >
19
20 < bean id =”UsersDao” class =”com.***.ssh.persistence.UserDao” >
21 < property name =”sessionFactory” >
22 < ref bean =”SSHSessionFactory” />
23 </ property >
24 </ bean >
25 </ beans >
26
这里面也没有多余de内容,不会出现代理方式时,多份XML同时配置de问题,减少了维护量.
同时,您会发现,我并没有把Hibernatede具体配置放在这里面,而是用Hibernate自身de配置来管理.
这样de话,我三层之间de依赖性会降到较低,两头可以任意换到其中de某一层.
顺便要说de是,常见de书籍上面发现往往不会有如此深入de探讨,难道是怕初学者看不懂吗?
另外,对于一个架构来说,要解决de问题决不是指这些,通常我可以采用RUPde4+1视图de方法去考虑架构de方方面面.我也可以从以下一些方面来各个击破:安全性,数据输入输出de校验与转换,国际化,LOG,异常处理,异构系统整合,后台运行程序等等.如果是多个数据库,我还需要更多de考虑事务控制.
我想我后面会去完善这个整合,并实现一个Demo,作为小de简单de项目快速开发de基础.

整合时遇到过如下问题:
问题1:启动时出现 “严重: Error listenerStart ”
这个问题,网上有很多解决办法:
有一种最简单de解决办法是把用Listener初始化Spring改为用Servlet初始化Spring,但这样de方法不太好,一是没有找到根源,二是可能会带来新de问题.
比较好de一种解决办法是,加上Log4Jde相关配置,然后再启动时,就会出现各类详细信息,这样可根据具体信息再来解决,一般可能是DataSource配置,或环境配置有问题.
参考网址:http://hi.baidu.com/xht314/blog/item/808ecf13c1dd1820dd5401af.html
问题2:遇到“Required extension qdox not found”这样de提示
网上也有解答,我用de方法是直接把commons-attributes-compiler.jar这个包去掉.当然如果您要用到这个包de话,可以参考下面这个地址:
http://hi.baidu.com/sky_lei/blog/item/77ee17085543b232e8248824.html
问题3:Struts包与Spring包冲突de问题
我遇到包有冲突,换成Struts需要de优先就OK了,现在deJAR档越来越麻烦了,很多项目deJAR档都被开发人员搞得乱七八糟,看来Maven是个好东西,至少思想是好de,可能下一步需要研究一下.